如何改写壳内部以便欺骗PEID或防通用脱壳机等
如何改写壳内部以便实现欺骗PEID或防通用脱壳机,脱壳脚本等功能感冒了,吃完晚饭后被逼去打了一小瓶点滴..护士保证说明天就好了.
今晚一个人睡,老婆到苏州玩去了O_O自由了..我..
进入正题,做dup皮肤的时候看见以前做的一些壳patch,就想着写个教材
出来分享,无多少技术含量,使用工具而已,DIY能力和自身功力成正比.
(针对没有源码的情况)
本文以ExeStealth2.76加密壳为例子.
1.壳patch
这类一般是给加密后的程序打补丁用的,用于欺骗一些PE侦查程序(如PEID),防止
脱壳机,脱壳脚本等.
这里就以欺骗PEID为例开始:
给试验品test.exe加壳(ExeStealth2.76-除了CRC校检),peid查下,如图1
PEID使用的签名库是fly制作的UpKPEiDSign,这个比较准确..~_~
打开签名库txt查找EXE Stealth V2.7X -> WebtoolMaster,
签名如下:
signature=EB65 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 60 E8 00 00 00 00 5D 81 ?? ?? ?? ?? ?? B9 ?? ?? ?? ?? ?? ?? 04 ?? ?? 01 EB 05 ?? ?? ?? ?? ?? EB 00 EB 00 ?? ?? ?? ?? ?? ?? ?? ?? ?? EB 00
ep_only = true
签名检查的是入口的二进制,这里很明显入口就一个跳转,直接到60 E8这里...
使用OD载入经过加密的test.exe,F8后
代码如下:
004120C7 60 pushad
004120C8 E8 00000000 call 004120CD
004120CD 5D pop ebp
因为我们要修改目标程序,所以加密的时候没有使用CRC校检功能,直接patch
校检代码的飘过...
看上面代码就知道,入口一段就是所谓的花指令..我们跳到"入口",把pushad
nop掉
004120C7 90 nop
004120C8 E8 00000000 call 004120CD
004120CD 5D pop ebp
保存程序,使用PEID查看修改的程序test1.exe,如图2
PEID已经不能认识它了..欺骗完成...这里是最简单不过的了..
我们难道只能一个一个的对加密后的程序修改??这样多累..
可以做个二进制搜索替换patch,还可以直接修改壳,让它加壳后的程序都能通用.
patch很简单,比较自己修改的程序就知道替换那些字节了,问题是很多壳都有
自校检功能,patch后那么运行不了,那么不能使用那个加密选项.多不爽.
直接修改壳就能解决自校检问题..就不用怕修改后运行不了程序了.
进入本次主题:修改壳内部
2.直接修改壳实现欺骗PEID
我们这里使用的是ExeStealth2.76这个加密壳,汇编写的,附源程序(未加壳).
简单说明下:加壳后程序的"stub"代码,一般都在壳主程序里面的,或者调用的
程序里面,我们就是修改那段"stub",以便直接通用.
OD载入加密后test.exe,代码如下:
00412060 > /EB 65 jmp short 004120C7
00412062 |45 inc ebp
00412063 |78 65 js short 004120CA
00412065 |53 push ebx
00412066 |74 65 je short 004120CD
00412068 |61 popad
00412069 |6C ins byte ptr es:, dx
0041206A |74 68 je short 004120D4
0041206C |2056 32 and byte ptr , dl
0041206F |202D 20777777 and byte ptr , ch
00412075 |2E:77 65 ja short 004120DD
00412078 |62746F 6F bound esi, qword ptr
提取二进制
EB 65 45 78 65 53 74 65 61 6C 74 68 20 56 32 20 2D 20
77 77 77 2E 77 65 62 74 6F 6F
这里关键一点,就是如何在壳内部定位这段"stub",请看下文..
在OD(CPU-主线程模块)中,点击右键-[查找]-[二进制字串],
复制上面的二进制,如图3
找到一处,这里就是壳的"stub".如图4
分析下,如图5
地址:004027D3 就是壳"stub"开始处
然后随便你想怎么修改就怎么改..当然加壳后的程序要能运行.
我就来修改下,让PEID识别为PESpin 0.3x - 1.xx -> cyberbob做为演示.
找个pespin 0.3x-1.xx程序随便加壳下,复制入口的二进制代码,如下
EB 01 68 60 E8 00 00 00 00 8B 1C 24 83 C3 12 81 2B E8 B1 06
00 FE 4B FD 82 2C 24 71 DF 46 00 0B E4 74 9E B8 00 10 40 00 EB 06
OD载入ExeStealth2.76.exe,Ctrl+G,输入004027D3回车后,拉黑
004027D3到004027FA之间的代码,如图6
复制上面的pespin入口代码,然后在拉黑界面中点击右键-[二进制]-
[二进制粘贴],结果如图7
保存后发现经过加壳后的程序都无法运行.说明上面这段欺骗代码有问题.
对比原程序很容易发现,我们的伪装代码最后那个跳转地址有问题,把
004027FB /EB 06 jmp short 00402803
修改成
004027FB /EB 3D jmp short 0040283A
保存程序.测试运行正常,欺骗成功,以后用它加壳的程序都
成了pespin 0.3x-1.xx,通用性强.当然你可以把它伪装成
ASProtect/Armadillo/Themida/Execryptor等等
上面伪装过程中,出现了试验品程序运行不了的问题,这个就是
汇编问题了,有基础,熟悉壳流程,更加方便各种修改(没有源码,自己DIY).
市面上那些伪装器,免杀程序之类的,修改也和这个大同小异,不过它们就是一个
patch,简单介绍下它们的流程.
判断入口地址:比如是00002230
1.载入程序读取入口点地址00002230.
2.给程序增加个区段(大部分).
3.修改入口代码,直接jmp到新区段里面去.
4.在新区段里面写伪装代码,花指令,免杀代码之类的.
5.代码最后jmp到00002230.
就这样.比较初级的一类了,高级的就是各种异常,校检,序乱,最后就是VM了.
3.防通用脱壳机.
这里就不一一叙述,壳太多,比如:UPX
UPX自带有脱壳JJ,而且是完美的脱壳.
UPX脱壳标识点很多,大家自行找关键代码,修改下即可,就可以防止
它自身的脱壳JJ了.最简单就是修改下加壳后的区段名就能它不能认识自己了.
这里只是个例子,比如aspr的加密壳,有自校检,还有volx的通杀脚本.
我们就直接修改壳程序,修改哪里防止脱壳脚本呢?这个就要自己去找关键
代码了,怎么找?你能看到汇编代码,直接找个试验品用aspr加密后,打开
volx的脚本,对比试验品的代码,把脱壳脚本要用到或者查找的关键代码修改下
,脚本就跑不动了.前提是:修改后试验品能运行,又没有破环加密保护.
怎么修改??那就是自己的问题.
修改好了代码,又能防止脱壳脚本,最后直接在aspr主程序里面修改即可,以后
就通用了(修改方法和上面的壳内修改代码欺骗PEID一样)
小结:教教不会的友友合理利用工具,本文阐述是在没有源码的情况下修改(如果有src,随便你怎么写)壳内部实现其他功能,这里演示了欺骗PEID和防止通用脱壳,
只要你汇编过关,你可以在里面写INT3,写非法内存访问,写特权指令,写校检等等..
强度和功力成正比.
下面是PDF版本:
http://www.dbank.com/download.action?t=40&k=MjUyMjY3Mg==&pcode=LCwxNjUwMTgsMTY1MDE4 哇塞.
好强大.!!
可是
我看不懂这个 - -.!! 呵呵 我也是 只能膜拜了 :lol
很好 很邪恶 这个方法还不错哦。 的确不错 看了有心得 很厉害哦,学习! 额。。太复杂了,直接看不懂。。 高手的东东都是好东东。感谢分享 有工具最好了~呵呵!
页:
[1]
2