首页
社区
课程
招聘
未解决 [原创]脱壳之UPX脱壳步骤及问题
发表于: 2019-4-28 21:51 11739

未解决 [原创]脱壳之UPX脱壳步骤及问题

2019-4-28 21:51
11739


我用的是UPX3.09的壳


程序是自己写的,是个HelloWord,只是为了练习脱壳而使用的


载入OD后依旧是使用ESP定律脱壳,ESP定律从我这次脱壳来理解的话,就是程序开始时有个PUSHAD指令来保存所有寄存器状态,PUSHAD指令就想是大括号,有PUSH就有POP,两者共同的特点就是修改了ESP寄存器的值,所以我们需要在被修改的值上下硬件断点,来找到POP指令的位置,找到POP后就离原本的程序OEP不远了

按下F9,正如之前所说,可以找到POPAD指令,所以此处应该就是壳结束源程序开始的位置(但还不是OEP),下面的jmp指令做了跨段跳转,根据加密与解密中给出的四种脱壳技术讲解,jmp作出跨段跳转也是即将到达OEP的信号


执行到jmp后就来到这里,需要F7步入


这里就是OEP了(经历了无数次错过后的经验)


到OEP后需要用ollydump插件来dump出源程序,因为需要手工重建输入表,所以这里没选


在使用importREC之前还需要得到RVA的位置,在OEP处有个call 401652,此处按回车就可以看到call中又call了kernel32的函数,选择数据窗口中跟随,看到了IAT的可能的起始地址是402000,而IAT的可能的结束位置在4020b4,大小是b4



程序基址是400000,OEP的位置是40169f,所以OEP处填169f,RVA处填2000,大小填B4,获取导入表后就可以直接点修正转储了

接下来是问题:

1、  在脱壳的时候发现程序开了ASLR和不开ASLR区别很大(我用VS写的程序),开了ASLR后IAT根本就是乱的,修正转储时会报错,不明白原理,希望有大佬出来解释下,是不是恶意文件在编译的时候开启ASLR并且加壳,就会对脱壳产生很大的难度

2、  车里虽然关闭了ASLR,但是修正转储后的文件依然无法运行(闪退),所以我之前OD找到IAT时用的是可能的地址,难道说这IAT还有别的地址??

3、  

在IAT自动搜索时会多出来两个用户代码的函数(主要是看地址位置为用户代码区),我怀疑之所以程序不能运行可能和这两个函数有关,有没有大佬指点下,鄙人感激不尽o(╥﹏╥)o


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

上传的附件:
收藏
免费 2
支持
分享
最新回复 (2)
雪    币: 2281
活跃值: (12804)
能力值: ( LV12,RANK:312 )
在线值:
发帖
回帖
粉丝
2
选中无效指针,右击剪切指针即可
2019-4-29 07:54
0
雪    币: 14659
活跃值: (17754)
能力值: ( LV12,RANK:290 )
在线值:
发帖
回帖
粉丝
3
理想小青年 选中无效指针,右击剪切指针即可
试过,脱壳后程序依旧闪退。。。
2019-4-29 10:04
0
游客
登录 | 注册 方可回帖
返回
//