反调试,藏OEP,IAT崩坏——UPX 3.95增强版
本帖最后由 johnick 于 2022-8-15 11:40 编辑萌新第一次脱壳。
认真看完几个教程,撸起袖子干。
1,查克拉。图1
2,看到UPX,心头一喜。拉进OD瓮中捉鳖,没想到我竟是鳖。
F9心脏骤停。查了半天,原来这叫反调试
ESP定律,已停止。
学习大佬文章:https://www.52pojie.cn/forum.php ... =%B7%B4%B5%F7%CA%D4
IsDebuggerPresent下断,已停止。
CheckRemoteDebuggerPresent下断,已停止。
简单的方法不管用。
图2
3,这里出现第一个疑问:先脱壳还是先破反调试?
我这里尝试先脱壳(心存侥幸,若反调试写在壳里,脱完能一起摆脱)。
4,找OEP。UPX 3.95比早期版本复杂很多,但还是有迹可循。拉进x32dbg,跳转2次,看到pushad。回到OD,向下找到对应popad。出现大跳。图3456
5,大跳以后,并未如期出现oep,来到另一处函数。看到了这个call 00414B70。f7进去,看到了push ebp;mov ebp,esp。作为一个欠缺经验的萌新,我就拿不准了。这个call实质上也能看作一个大跳,所以这里算不算oep呢?但是在学习的教程中,没有一个UPX的壳是用call来实现大跳的,而且这里的第三句lea,看着也不太像常见程序OEP的后续。
这里我陷入了深深的迷茫,想要请教高人!图78
6,权当它是OEP,先继续吧。打开ImportREC,填入地址。可以搜出IAT。
但问题接踵而至:部分IAT无效。图9,10
7,回到OD查看IAT。
FF15搜到图11,似乎不是IAT,排除。
FF25搜到图12,且在代码顶端,应该是IAT了。顺藤摸瓜查地址,出现了让我第二次纠结的东西,图13,这些9C8A38上面的东西算不算IAT呢?
找到随便其中一个的代码段,它居然在代码中间!地址段的9C8A30,到了代码段,夹在了9C8A2F和9C8A32之间!而且萌新我也看不懂它是什么。无语。图14
8,不止如此,9C8A38下方某些地址段,也混入了奇怪的东西,导致ImportREC无法识别某些函数。图15
9,9C8A38上下这些无法识别的地址是不是IAT呢?这可难住我胖虎了。我个人猜测,有可能是的。因为ImportRec给的RVA是从5C813C开始的,这恰好是这一串东西上面的一行0。图16,17
但是这带来了另一个难题,这种IAT如何修复?不知有没有高手懂这个。
10,同时,在图12下方,4032F0出现了另一个疑似OEP代码的结构,和图8非常类似,但用32F0作为OEP,ImportREC搜不出东西。图18,19
总结下来,4个问题:
1,OEP真的是414B70吗?这是Delphi?
2,9C8A38上面也属于IAT么?如果是,有好的修复思路么?
3,这种情况,先破反调试,还是先脱壳呢?
4,有什么好的办法破反调试么?
萌新叩谢! 本帖最后由 johnick 于 2022-8-23 16:42 编辑
Jx29 发表于 2022-8-19 06:51
关于脱壳
1.在哪里dump
我的观点和Hmily大佬的一样,应该是在大跳之后那里,从图中看是0080DB30那里dump ...
谢谢哥们,你的回帖对我很有帮助。这几天一直在埋头攻克,但进展不快,杂事也多。
汇报一下尝试的结果:
一、脱壳
1,0080DB30确实是OEP候选之一,当时我用枚举法在0080DB30、00414B70、004032F0三个点,使用ollydump方法1、方法2,以及LordPE+ImportREC,这3*3的组合遍历过一遍,效果一样:
方法1,无法找到入口,图1
方法2,双击后没反应,应该是秒退了
LordPE+ImportREC,004032F0找不到IAT,另外2个有同样的问题:有IAT,但大部分无效,见1楼图10
据此,我认为0080DB30和00414B70都有OEP的潜质,但脱壳的核心问题在于修复IAT。而此程序的IAT我不会修复。。。见1楼
2,见1。
3,这里的第二条链接,UPX脱壳脚本我在发贴前就尝试失败了,它识别不出这个非典型UPX壳,图2
第一个链接的脱壳机,我试了一下成功了,至少部分成功了。
成功的点在于,dump.exe可以运行。让我不确定的点在于,对dump.exe查壳居然是Pascal,不是说一个程序不能用Pascal写,而是我怀疑我进入了另一个壳。。。图3
其实之前我自己下过一个UPX 3.95,用upx -d命令也达到了类似的效果。
这里用脱壳机分析的结果,它的OEP显示是80db30,而且它成功修复了IAT。图4
这里有点遗憾,我没有靠自己分析或写脚本脱壳,而是依赖外力,技能没有提高。这是我自己的问题,还是非常感谢你提供的思路!
二、反调试
1,反调试应该是在主程序内,至少不在UPX这层壳。
2,我试了一下,这个OD可以破反调试。
这对我帮助巨大!不是因为它破了反调试,而是我学到了东西。
通过二分枚举法不断删插件重启OD,我试出了是T_Hide这个插件配合StrongOD破解了反调试。
而T_Hide中,是ntdll.ZwQueryInformationProcess这个参数干掉了反调试。图5
通过搜索这个关键词,我查到了它在反调试中的应用,也知道了如果绕过它,除了插件,还可以手动修改或者Hook等一系列的知识,受益匪浅。
吾爱论坛的反调试帖子中,基本没有涉及ZwQueryInformationProcess。所以之前无论我怎么搜,也没法找到正确的方法。搜了很多外网的帖子包括看雪,大致有所了解。
我后来又找到了看雪的HideOD插件,达到了同样的效果。
3,我试过定位反调试,但定位的语句是in eax,dx,见1楼图2。基本没法继续,跳也不行,nop也不行。后来我才知道,这是虚拟机端口检测,属于反调试常用手段。
现在去掉反调试后,我还是在带壳破解,在登录前后下断进行分析,但是它自校验比较多,而且登录超时后经常没法继续尝试,不知是不是服务器的反调试机制。目前进展缓慢。
有兴趣有时间可以试试。
这个程序有点敏感,你下载以后告诉我一声,我取消掉分享。
https://pan.baidu.com/s/1G9GV-5f_vj350vxMQM9QRQ
0823 本帖最后由 Jx29 于 2022-8-19 08:04 编辑
关于脱壳
1.在哪里dump
我的观点和Hmily大佬的一样,应该是在大跳之后那里,从图中看是0080DB30那里dump,就在那里dump,不要在单步了
2.脱壳后打不开
不是脱壳没脱好,就是程序有自校验
3.脱壳机以及脱壳脚本推荐
https://www.52pojie.cn/forum.php ... peid%26typeid%3D131
https://www.52pojie.cn/thread-222719-1-1.html
没试过怎么知道呢?
如果用以上方法成功脱壳后还是打不开,应该是程序有自校验
关于反调试
1.从你的脱壳步骤来着,并没有遇到程序异常退出的情况,那么反调试应该是在主程序内,而不是在壳内
2.可以换一个od试试过反调试,没加插件的52od很多反调试都过不了
https://www.52pojie.cn/thread-1391378-1-2.html
3.定位反调试
可以在程序退出函数上下断,如果是异常退出此方法不管用
不知可否分享下程序?
upx跳走后的位置肯定是程序原始入口,要dump可以在那,当然也可能是新的壳入口,具体要看。 Hmily 发表于 2022-8-15 11:42
upx跳走后的位置肯定是程序原始入口,要dump可以在那,当然也可能是新的壳入口,具体要看。
最近看52官方培训第一期,kido小生ximo各种大神,当时真是群星璀璨,那个时代的求助帖估计都是秒杀吧哈哈哈。可惜了。期待的第二期不知还有没有。有点感慨,说句题外话 我最近也在研究这方面,说实话有点难 装个xp虚拟机,会让你更容易解决问题{:1_907:} hszt 发表于 2022-8-15 15:21
装个xp虚拟机,会让你更容易解决问题
嗯,但这个程序是win7/8/10的,win7的虚拟机太占资源了。我的理解是虚拟机可以更好的保护格盘什么的,但对调试本身没啥帮助? johnick 发表于 2022-8-15 16:12
嗯,但这个程序是win7/8/10的,win7的虚拟机太占资源了。我的理解是虚拟机可以更好的保护格盘什么的,但 ...
你的第8就可以避免 hszt 发表于 2022-8-16 09:35
你的第8就可以避免
哦?怎么说 1.脱壳机不能脱吗,od的脱壳脚本呢?
2.不能带壳破解吗?
3.有反调试不能附加吗? Jx29 发表于 2022-8-16 14:05
1.脱壳机不能脱吗,od的脱壳脚本呢?
2.不能带壳破解吗?
3.有反调试不能附加吗?
感谢你提供的思路。
1,OD脱壳脚本dump的exe无法打开,ImportRec的IAT无效的情况下,OD脱壳脚本很难解决吧?
针对这种UPX 3.95版本的变种,有什么好的脱壳机推荐吗?
2,在发帖的同时,我一直在自行带壳破解,确实有了一些进展。我发这个帖也并不是追求结果,而想通过交流提高水平。比如单论这个壳,我就没有好的办法破解。
3,谢谢你的建议。这个进程的反调试代码在最开始,附加进程的时候,反调试已经过去了。对一个反调试脱壳的crackme这么处理,对技术提高意义不大吧?
页:
[1]
2