吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1777|回复: 3
收起左侧

[CTF] bugku Mountain climbing

[复制链接]
ConMiko 发表于 2022-3-24 15:38


来做做看这道题 总体比较简单 没什么难度
首先这个是有加壳的 拖到DIE看一下是UPX壳



这UPX壳不是傻子都会脱吗直接拖到OD里进行脱壳



第一步就是pushad upx壳脱多了就能知道这壳有多脆弱 虽然可以自己魔改
看到pushad 有压栈就有出栈 直接查找命令 popad



在最后搜索到了popad
F7不断步入 这边遵守一个规则就是向上跳F4跳过
然后最后能看到一个大跳转



F7步入 又是一个大跳转



然后再F7就到了OEP了 (这边纠正一下 上面第一个jmp就是OEP 这个作者软件都是这样的)



这边是第一个方法 看见pushad直接搜索popad
这边再给一个方法 比较傻瓜化
一直遵守向上跳F4跳过就可以 然后一直F8还是能够跳到OEP
这边再给一种方法 ESP大法
在软件初始位置F7一下查看右侧ESP变更情况



数据窗口跟随 然后下个硬件断点



然后然后重置一下程序然后运行一下



然后又是熟悉的界面 jmp大跳转到OEP
这边再再再给一个方法
最后一次异常法
shift+F9让程序跑飞 然后计算按下几次后跑飞 下次就减一次继续调试 主要是这个壳太..(你们懂的 我不喜欢)所以一次就跑飞了 这样的话就是分析的代码少很多 像很多其他的比较厉害的壳可以用这个方法来少分析一点代码
当然也可以用upx的脱壳软件来脱(可能会损坏 建议手脱
这边就是大多数的方法 当然还有很多脱壳的方法这边就不一一细说
现在开始脱壳exe
这边要用到 lordpe 因为这个软件太过久远 有些在win10上已经用不了了…
这边用PETools来平替lordpe 因为卡巴斯基报毒 所以换个系统dump也是可以的
使用OD找到OEP后 选中进程然后完整转存



给他dump下来 然后重建PE一下 (这个是要养成一种习惯




别问我为什么要这样 弄就完事了 我之前学脱壳有个大牛就是说最好重建一下的
然后把dump下来的exe拖到win10 再继续IAT的修复 (别问为什么要换系统 没的说
打开加壳的软件 然后使用impREC



然后自动查找IAT点击获取输入表
注意!!现在是肯定不行的 直接转储到文件是肯定运行不了的 因为IAT还有几个没找到的 需要我们直接手动找
在OD的内存窗口中一个个找地址



可以看到RVA应该是3922C size就是248-22C = 58



输入进去点击获取输入表 可以看到又添加了很多函数
but!我们OD中仅仅看到了39000之后的 但是一开始找的IAT是32000开始的 所以再调整范围 干脆直接把里面的全找了 设置RVA为32000 四则为7000 最后删除无效指针



可以看到最完整的函数 最后转储到文件 选择之前dump下来的exe即可



拖到DIE查看 已经没有壳了



OD载入 直接就是OEP 查找字符串也可以直接查找 至此脱壳工作完成
手脱可以锻炼自己 不要一味依赖工具 有的时候脱不开的 不过手脱可能会对之后的逆向工作有误导 IAT修复是最主要的 IAT很重要 要好好去康康怎么修复 我是小白只能用这种暴力方法修复..
现在是就是IDA上场了 主要就是些算法 直接拖到IDA
shift + F12查看字符串 然后双击选择入口字符串 找到main函数按F5
前面就是在创建随机数数组



直接用c语言照着写随机数 0xCu 种子一样随机结果也一样



这一段能够跑出来一堆数字


[Running] cd "c:\Users\xinra\Desktop\" && gcc 1.c -o 1 && "c:\Users\xinra\Desktop\"1
77
5628 6232
29052 1558 26150
12947 29926 11981 22371
4078 28629 4665 2229 24699
27370 3081 18012 24965 2064 26890
21054 5225 11777 29853 2956 22439 3341
31337 14755 5689 24855 4173 32304 292 5344
15512 12952 1868 10888 19581 13463 32652 3409 28353
26151 14598 12455 26295 25763 26040 8285 27502 15148 4945
26170 1833 5196 9794 26804 2831 11993 2839 9979 27428 6684
4616 30265 5752 32051 10443 9240 8095 28084 26285 8838 18784 6547
7905 8373 19377 18502 27928 13669 25828 30502 28754 32357 2843 5401 10227
22871 20993 8558 10009 6581 22716 12808 4653 24593 21533 9407 6840 30369 2330
3 28024 22266 19327 18114 18100 15644 21728 17292 8396 27567 2002 3830 12564 1420
29531 21820 9954 8319 10918 7978 24806 30027 17659 8764 3258 20719 6639 23556 25786 11048
3544 31948 22 1591 644 25981 26918 31716 16427 15551 28157 7107 27297 24418 24384 32438 22224
12285 12601 13235 21606 2516 13095 27080 16331 23295 20696 31580 28758 10697 4730 16055 22208 2391 20143
16325 24537 16778 17119 18198 28537 11813 1490 21034 1978 6451 2174 24812 28772 5283 6429 15484 29353 5942
7299 6961 32019 24731 29103 17887 17338 26840 13216 8789 12474 24299 19818 18218 14564 31409 5256 31930 26804 9736


[Done] exited with code=0 in 0.439 seconds


然后再去看看后面的部分



这边可以看到第三方的if在判断输入的Str变量的字符长度 必须为19
然后之后有个sub_41114F(); 先不管
主要是先看后门两个if 都是在讲输入的Str必须为76 82这两个对应的就是十进制的L和R
然后他在判断L的时候将i++了, 在判断R的时候 j++了
然后又由第一行的提示可以看出需要的是max 题目又是爬山的意思 所以应该可以联想到为同一行中一个数对右边的数进行大小判断 判断一次换一行 左边判断大就不往右移一位 如果是右边大就往右边移一位再和右边的数进行判断
那就可以写出来大致内容了



跑一下就得到了结果


[Running] cd "c:\Users\xinra\Desktop\" && gcc 1.c -o 1 && "c:\Users\xinra\Desktop\"1
RRRRRLLRRRLRLRRRLRL


[Done] exited with code=0 in 0.364 seconds


到这里判断部分就结束了 但是这个是不对的 之前我们漏下了一个函数sub_41114F()
我们追进去看一下



跟进那个函数



再跟进去



大致就是在异或数字4 (为什么a3是4可以看第二张图 传参进去的a3就是前面的4)
这边靠我的实力已经接不下去了,因为看起来太复杂了,这边我们可以用od来调试
搜索字符串然后跳到初始位置 给error前面的两个call加上断点 然后运行
这边肯定会卡住 直接F8步过然后程序里输入19个L然后运行到第二个断点处



此时输入的ascii依然是19个L 还没有进行异或操作



这边把19个L压栈 不断补过



最后回到了error处 但是可以看到右下角原本19个L已经有了变化



即双数位都进行了异或 异或是不是4可以直接算出来 76 ^ 4是72十进制转一下就是H
我们在上面的代码也能看到有异或的过程



重复操作输入19个R得到结果如何



可以看到R变成了V 即82 ^ 4等于86



可以看到依然是双数位变化了 所以可以直接修改之前写的代码



进行判断s除2是否有余数 因为他是从0开始取的 所以要判断余数是否有1
然后进行异或操作 跑一下就得到最后的值 flag就是最后的值

[Running] cd "c:\Users\xinra\Desktop\" && gcc 1.c -o 1 && "c:\Users\xinra\Desktop\"1
RVRVRHLVRVLVLVRVLVL


[Done] exited with code=0 in 0.306 seconds



纯萌新 很多地方都讲的很模糊 有问题请各位大佬轻喷!

免费评分

参与人数 1威望 +1 吾爱币 +20 热心值 +1 收起 理由
Hmily + 1 + 20 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

13729181580 发表于 2022-3-24 17:35
感谢分享!
 楼主| ConMiko 发表于 2022-3-24 17:43
因为是直接从csdn的编辑器里复制过来的 所以有奇奇怪怪的字符 版型可能会有点问题... 第一次发帖做的有点不美观
moshuiNW 发表于 2022-3-25 09:26
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-5-16 12:51

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表