2 记下未改前的改函数的thunkvalue 举例:00062922
3 将要修改的文件用winhex等16进制形式打开,然后找到该函数的地址,比如说00062988
4 将该函数用00填充,移动到新地址如00070000
5 保存
6 将保存后的文件用lordpe打开,打开计算器,选择16进制,00062988-00062922+00070000,计算结果修改为新的thunkvalue。保存
<1>重建输入表常规壳(如UPX,北斗等),然后脱壳后修复时重建输入表
<2>转移输入表函数『这次要讲的重点,具有代表性』*
<3>加壳(最好是些猛壳之类的,如ASProtect等,这个很灵活,要多尝试!)
以上只是理论,要运用到实际上来还是有一定的差距,下面就利用第二种方法以一具体实例演示下,至于其它的两种呢,就留给大家自己研究吧!是的,这种方法很典型,所以本次屏幕录像就以它为重点讲解并演示。希望大家能掌握好!
首先让瑞星来查杀下,可以看到,瑞星是查杀的(提示信息为黑客工具,我们忽略)。
为了节省时间,特征码在做录像之前我已经定位好了(相信大家都会定位特征码吧)。特征处如下:
00001EAE <特征处>『目标程序是s扫描器,一款命令行下使用的扫描器,很强大!』
说下本次演示使用到的工具:
C32ASM,Lordpe,计算器(就这三样)
具体步骤:
A.使用C32ASM打开目标程序,找到特征处的输入表函数,复制下函数名(并把此处函数名用90填充掉),记录下起始地址,找到移动地址(我们把这个输入表函数向空白处移动『一般往下移动』,尽量移动远 点,这里我们移动到最底部。)。把这个输入表函数GetProcAddress名复制到移动处后,另存一份文件为exe.exe。
(注意:GetProcAddress就是这个输入表函数,不能修改字符大小写的,得转移下。)
B.使用计算器计算移动的大小,注意是16进制计算:(看C32ASM底部提示)移动『十进制』->334字节
『十六进制』->14E
用瑞星查杀看看,是不被杀的,但是不能运行,看错误提示,那是输入表函数没处理好的结果!
C.使用Lordpe打开目标程序exe.exe,找到目录,导入表,找到第一个动态链接库,修改第二个输入表函数的ThunkVaule,右键编辑就行。
原来Thunk值:0001C0A0。而我们把这个函数向下移动了14E(十六进制)字节,那么应该加上计算下
0001C0A0+14E=1C1EE则Thunk值变为:1C1EE。编辑进去!填写上API名称,即是那输入表函数名:
GetProcAddress。保存下就OK了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)