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
易学传真 哈哈哈哈,我要好好学习 ACP 我没脱过,看了一下你的描述,证明你有些基础的,其实很简单
停在 OEP 后,写个脚本,搜索代码段内,所有 call 入口为 e9 的调用,找到后,模拟执行一下
(不是用 sti ,是使用计算下一步跳转位置,静态模拟,速度快,只要跳转到的地址大于0x50000000
那么马上把该地址填充调用方,说简单,但你要学习一下脚本的编写 lgjxj 发表于 2014-5-4 10:32
ACP 我没脱过,看了一下你的描述,证明你有些基础的,其实很简单
停在 OEP 后,写个脚本,搜索代码段内 ...
{:3_170:}谢谢前辈的指点 有了思路豁然开朗 脚本会一点点,不过一直没怎么用过,现在先来试一试了。。
尿尿不洗手 发表于 2014-5-4 11:35
谢谢前辈的指点 有了思路豁然开朗 脚本会一点点,不过一直没怎么用过,现在先来试一试了。。
前辈,又来请教一个问题,这个程序下的断点会在OD重新加载之后消失,请问这个是我OD的问题,还是说程序能清楚我的断点,CC断点,硬件断点都不见了。换了个OD断点还是会被清除掉
程序问题,其实这个东西很古老了,不需要上面的做法,可以从对 某一调用的 e9 处,下硬件写入断点看看那里写入的一次过就可以修正
我上面说的方法可以说太高级了,是我专门对付vmp se 用的, Acp 出来的时候,就是加了花,硬件写入断点猪可以搞定了 lgjxj 发表于 2014-5-4 12:38
程序问题,其实这个东西很古老了,不需要上面的做法,可以从对 某一调用的 e9 处,下硬件写入断点看看那里 ...
大牛们都玩VMP SE膜拜啊。又跟了一下GetModuleHandle的调用,发最后的JE不是跳到API的第一句,API的前几句被放在N多JMP的过程中执行了。。 本帖最后由 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 ) 跳来跳去的,呵呵
哦,对,上面调试是在 WIN7 上进行的,如果是 xp ,那么脚本开头修改为
var i
var 1_b
var 2_b
bc
bphwcall
gpa "GetModuleHandleA", "kernel32.dll"
find $RESULT,#8BC65EC9C20400#
bp $RESULT+4
lgjxj 发表于 2014-5-4 18:08
哦,对,上面调试是在 WIN7 上进行的,如果是 xp ,那么脚本开头修改为
下午有课 刚刚回来看到您给我回的帖子,十分感谢这么周全的解答,这对我们这样的新手来说是相当鼓舞人心的,您说的对,后面的自己完成才会有意思。等把ACProtect会的差不多了我会写一篇帖子来帮助我这样的新手作为参考。。
页:
[1]
2