johnick 发表于 2022-8-15 11:35

反调试,藏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 12:45

本帖最后由 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 06:51

本帖最后由 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.定位反调试
可以在程序退出函数上下断,如果是异常退出此方法不管用
不知可否分享下程序?






Hmily 发表于 2022-8-15 11:42

upx跳走后的位置肯定是程序原始入口,要dump可以在那,当然也可能是新的壳入口,具体要看。

johnick 发表于 2022-8-15 12:01

Hmily 发表于 2022-8-15 11:42
upx跳走后的位置肯定是程序原始入口,要dump可以在那,当然也可能是新的壳入口,具体要看。

最近看52官方培训第一期,kido小生ximo各种大神,当时真是群星璀璨,那个时代的求助帖估计都是秒杀吧哈哈哈。可惜了。期待的第二期不知还有没有。有点感慨,说句题外话

tencentma 发表于 2022-8-15 14:29

我最近也在研究这方面,说实话有点难

hszt 发表于 2022-8-15 15:21

装个xp虚拟机,会让你更容易解决问题{:1_907:}

johnick 发表于 2022-8-15 16:12

hszt 发表于 2022-8-15 15:21
装个xp虚拟机,会让你更容易解决问题

嗯,但这个程序是win7/8/10的,win7的虚拟机太占资源了。我的理解是虚拟机可以更好的保护格盘什么的,但对调试本身没啥帮助?

hszt 发表于 2022-8-16 09:35

johnick 发表于 2022-8-15 16:12
嗯,但这个程序是win7/8/10的,win7的虚拟机太占资源了。我的理解是虚拟机可以更好的保护格盘什么的,但 ...

你的第8就可以避免

johnick 发表于 2022-8-16 10:56

hszt 发表于 2022-8-16 09:35
你的第8就可以避免

哦?怎么说

Jx29 发表于 2022-8-16 14:05

1.脱壳机不能脱吗,od的脱壳脚本呢?
2.不能带壳破解吗?
3.有反调试不能附加吗?

johnick 发表于 2022-8-17 10:32

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
查看完整版本: 反调试,藏OEP,IAT崩坏——UPX 3.95增强版