尿尿不洗手 发表于 2014-5-3 17:23:25

ACProtect 不知如何修复IAT

本帖最后由 尿尿不洗手 于 2014-5-3 17:28 编辑

查壳 发现是ACProtect1.x Delphi程序
通过 Delphi程序第一个CALL的特征码找到OEP






然后就想着修复一下IAT就可以脱壳了……想法是好的……


然后跟进第一个call


发现 GetModuleHandleA 变成了一个CALL的形式
进CALL 发现又是jmp 继续跟啊跟


终于跳到 GetModuleHandle函数了


请教各位前辈们,该怎么修复这个程序的IAT。


附上连接,有时间的话请帮忙看一下:                                                    
http://pan.baidu.com/s/1c0AabUo






易学传真

誓约丨刻骨铭心 发表于 2014-5-3 21:37:55

哈哈哈哈,我要好好学习

lgjxj 发表于 2014-5-4 10:32:20

ACP 我没脱过,看了一下你的描述,证明你有些基础的,其实很简单

停在 OEP 后,写个脚本,搜索代码段内,所有 call 入口为 e9 的调用,找到后,模拟执行一下

(不是用 sti ,是使用计算下一步跳转位置,静态模拟,速度快,只要跳转到的地址大于0x50000000

那么马上把该地址填充调用方,说简单,但你要学习一下脚本的编写

尿尿不洗手 发表于 2014-5-4 11:35:13

lgjxj 发表于 2014-5-4 10:32
ACP 我没脱过,看了一下你的描述,证明你有些基础的,其实很简单

停在 OEP 后,写个脚本,搜索代码段内 ...

{:3_170:}谢谢前辈的指点 有了思路豁然开朗 脚本会一点点,不过一直没怎么用过,现在先来试一试了。。

尿尿不洗手 发表于 2014-5-4 11:55:04

尿尿不洗手 发表于 2014-5-4 11:35
谢谢前辈的指点 有了思路豁然开朗 脚本会一点点,不过一直没怎么用过,现在先来试一试了。。

前辈,又来请教一个问题,这个程序下的断点会在OD重新加载之后消失,请问这个是我OD的问题,还是说程序能清楚我的断点,CC断点,硬件断点都不见了。换了个OD断点还是会被清除掉

lgjxj 发表于 2014-5-4 12:38:48

程序问题,其实这个东西很古老了,不需要上面的做法,可以从对 某一调用的 e9 处,下硬件写入断点看看那里写入的一次过就可以修正

我上面说的方法可以说太高级了,是我专门对付vmp se 用的, Acp 出来的时候,就是加了花,硬件写入断点猪可以搞定了

尿尿不洗手 发表于 2014-5-4 13:02:40

lgjxj 发表于 2014-5-4 12:38
程序问题,其实这个东西很古老了,不需要上面的做法,可以从对 某一调用的 e9 处,下硬件写入断点看看那里 ...

大牛们都玩VMP SE膜拜啊。又跟了一下GetModuleHandle的调用,发最后的JE不是跳到API的第一句,API的前几句被放在N多JMP的过程中执行了。。

lgjxj 发表于 2014-5-4 16:42:20

本帖最后由 lgjxj 于 2014-5-4 16:44 编辑

帮你看了看,第一次分析 ACP ,感觉和现在的壳比起来温柔多了,帮你一下,后面的你自己完成 (这样才有意思 )

其实也不是帮你,我就真的没分析过这个老壳,顺手看看 。。。。
你现在的任务就是想个办法,把 的 API 地址保存起来,然后 在2_b处废掉这条代码,然后把保存的填回去(进步靠自己)


var i
var 1_b
var 2_b
bc
bphwcall

gpa "GetModuleHandleA", "kernel32.dll"
find $RESULT,#ebed#
go $RESULT
STI
sti
find eip,#8BC65EC9C20400#
bp $RESULT+4


l:
esto
inc i
cmp i,12
je o
jmp l
o:
bc
sti
findmem #606681D901F661B8DD36B46105B3F36DBA0571D5DDE3E912000000#,00A00000
mov 1_b,$RESULT

findmem #83EC04891C2488CB5088DC88228B042483C4048B1C2481C4040000008B0C24#,00A00000
mov 2_b,$RESULT+b

log 1_b       // 断在这里,esp+8=API 地址
log 2_b       // 这里负责写入 E9 (JMP ) 跳来跳去的,呵呵




lgjxj 发表于 2014-5-4 18:08:07

哦,对,上面调试是在 WIN7 上进行的,如果是 xp ,那么脚本开头修改为


var i
var 1_b
var 2_b
bc
bphwcall

gpa "GetModuleHandleA", "kernel32.dll"

find $RESULT,#8BC65EC9C20400#
bp $RESULT+4

尿尿不洗手 发表于 2014-5-4 20:14:00

lgjxj 发表于 2014-5-4 18:08
哦,对,上面调试是在 WIN7 上进行的,如果是 xp ,那么脚本开头修改为




下午有课 刚刚回来看到您给我回的帖子,十分感谢这么周全的解答,这对我们这样的新手来说是相当鼓舞人心的,您说的对,后面的自己完成才会有意思。等把ACProtect会的差不多了我会写一篇帖子来帮助我这样的新手作为参考。。
页: [1] 2
查看完整版本: ACProtect 不知如何修复IAT