【交作业贴】吾爱破解培训第九课交作业专帖
前提介绍:《吾爱破解培训第九课:短兵相接--深入浅出探讨脱壳细节(下)》 讲师:L4Nce http://www.52pojie.cn/thread-420354-1-1.html
请大家用课程学到的知识,对加壳的作业进行脱壳和编写脱壳脚本,脱壳脚本可以直接上传,脱壳成品可以上传网盘贴地址,节省论坛空间就不要上传到论坛了。
作业截至到2015年10月22号00:00前提交算数,没有加报名群的同学也可以提交,后期会通过作业的提交情况,来淘汰没有交作业的,让交作业的新人加入。
对于作业的解答我已经更新到上面培训贴中,作业遇到问题的可以参考一下。
帖子我设置只有我可见,等一周后取消,切记不要回复和作业无关内容,否则会被扣分,前50个名交作业的同学有奖励。
mov iat_s, 0047d024
mov iat_e, 0047d16c
@LOOP1:
mov iat,iat_s+663CFE
mov ,
add iat_s,4
cmp iat_s,iat_e
jne @LOOP1
mov iat_s,0047d16c
mov iat_e,0047D374
@LOOP2:
mov iat,iat_s+644310
mov ,
add iat_s,4
cmp iat_s,iat_e
jne @LOOP2
mov iat_s,0047D384
mov iat_e,0047D390
@LOOP3:
mov iat,iat_s+6A2CCE
mov ,
add iat_s,4
cmp iat_s,iat_e
jne @LOOP3
mov iat_s,0047D390
mov iat_e,0047D600
@LOOP4:
mov iat,iat_s+654543
mov ,
add iat_s,4
cmp iat_s,iat_e
jne @LOOP4
MSG "IAT修复完成!"
ret
步骤:
①在.text段F2,F9运行
②在.rdata段F2,F9运行
③在.text段F2,F9运行
此时到达OEP,然后运行上面的修复IAT的脚本即可,最后用ImportREC修复即可完成脱壳。用PEID查壳,发现程序是用vc6.0写的。
脱壳后的程序我已上传到网盘,地址是:http://pan.baidu.com/s/1bngBxHt
谢谢分享。学习了! 本帖最后由 苏紫方璇 于 2015-10-15 22:57 编辑
var iat_b ;iat起始位置
var iat_e ;iat结束位置
var tmp ;临时中转
var string ;储存代码段自动跟踪命令
var oldesp ;esp备份
var oldeip ;eip备份
var codebegin ;代码段起始地址
var codesize ;代码段大小
gmi eip,CODEBASE ;获取代码段地址
mov codebegin,$RESULT
gmi eip,CODESIZE ;获取代码段大小
mov codesize,$RESULT
add codebegin,codesize ;得到末尾地址
mov string,"eip < " ;构建自动跟踪指令
add string,codebegin
msg "请取消所有的忽略异常"
ESTO
ESTO
ESTO
ESTO
ESTO
ESTO
ESTO ;最后一次异常法
bphws ,"x" ;Seh地址下硬件断点
ESTO ;Shift+F9
bphwcall ;清除所有硬件断点
TICND string ;TICND "eip < 47d000" ;tc eip<47d000
cmt eip,"程序入口点"
msg "找到入口点"
;IAT修复
mov iat_b,0047D000
mov iat_e,0047D6A0
mov oldesp,esp ;备份esp,eip
mov oldeip,eip
@ILoop:
mov tmp, ;tmp=原始iat表值
cmp tmp,10000000
ja @Next ;若大于10000000就换下一个
cmp tmp,00400000
ja @Start ;若大于00400000就继续运行
cmp tmp,0
jz @Next ;等于0就换下一个
@Start:
mov eip,tmp ;设定eip
mov esp,oldesp ;恢复esp
rtr ;运行到返回
mov , ;修复IAT
@Next:
add iat_b,4 ;下一个iat
cmp iat_b,iat_e ;判断是否结束
jnz @ILoop
mov eip,oldeip ;恢复eip,esp
mov esp,oldesp
ret http://yunpan.cn/cFwumyRthitBp访问密码 7f45
一岁就很帅呀{:1_903:} 作业:
http://yunpan.cn/cFwuFqR59fSDV (提取码:e64c) 本帖最后由 黑的思想 于 2015-10-17 23:31 编辑
最后一次异常法,最后在text下内存访问断点,直接到达OEP
004C63EC 处用nop填充
004C6401 处修改为jmp
iat 自动修复 用importrec修复
作业链接:http://pan.baidu.com/share/link?shareid=1861732399&uk=3864546619msg "最后一次异常法脱壳,请忽略所有异常"
msg "ARE YOU READY ?"
var mbase
VAR iatb
VAR iate
var cbase
var csize
var temp
var name
var dumped
var adr
GMI eip,MODULEBASE
MOV mbase,$RESULT
MOV iatb,mbase
MOV iate,mbase
MOV adr,mbase
add iatb,07D024
add iate,07D600
add adr,0C6833
LOOP1:
ESTO
cmp eip,adr
jne LOOP1
gmi eip, CODEBASE
mov cbase, $RESULT
gmi eip, CODESIZE
mov csize, $RESULT
bprm cbase, csize
esto
cmt eip, "<== 这就是传说中的oep!!!"
msg "这里就是OEP了,你真幸运!"
msg "接下来,我们来修复iat好吗?"
LOOP2:
mov temp,
cmp temp,0
je next
cmp temp,070000000
ja next
find temp,#FF30C3#
mov temp,$RESULT
sub temp,5
mov temp,
add temp,1
mov ,
next:
add iatb,4
cmp iatb,iate
jne LOOP2
msg "iat修复完成,恭喜!"
msg "dump去吧!"
ret
我来学习学习~看看楼主的进度! 本帖最后由 凌云9 于 2015-10-16 13:16 编辑
链接:http://pan.baidu.com/s/1ntnI71n 密码:q5aw
脚本写的我也是醉了,xp脱壳修复正常(win7可运行){:1_896:}var ss
mov iat_1,0047D024
mov iat_2,0047D600
bpWM 00401000,FF
run
bpmc
BP 004C6070
RUN
BPRM 00401000,FF
BP 0045D4F6
rUN
bpmc
msg "oep"
@IAT_LOOP:
mov ss,
cmp ss,0
je@NEXT_LOOP
cmp ss,76c20aa2
je@NEXT_LOOP
cmp ss,76c31f8e
je@NEXT_LOOP
cmp ss,76c41c91
je@NEXT_LOOP
cmp ss,770F7A30
je@NEXT_LOOP
cmp ss,770FCCFD
je@NEXT_LOOP
cmp ss,7715DB75
je@NEXT_LOOP
find ss,#FF30C3#
mov ss,$RESULT
cmp ss,0
sub ss,5
mov ss,
add ss,1
mov ss,
mov ,ss
@NEXT_LOOP:
add iat_1,4
cmp iat_1,iat_2
jnz @IAT_LOOP
ret
交第八九课作业前先补交1, 2,4课作业,压缩包里有分析笔记. 下载地址与第九课地址一样,在文章最后
第八九课作业分析:
查了下壳: telock
不清楚这壳,也没在百度上查找资料,只想先试试
既然不清楚什么壳,但看过去是简单的,所以用单步跟踪
单步一下,在4C5000处,运行后,4C5000处指向OEP,但用任何断点都断不下来
用插件加强断点,但程序弹出CRC错误提示
跟踪了一下,发现程序常常进行自身解码, 至于CRC完全靠猜测,所以得出如下步骤:
1. 004C507A 这里下硬件断点.
此处查不到死码,因为是后来解码出来的,脚本中也不想写一大堆的STI,所以直接用常量定位
2. 向下拖到004C5438这个位置,F7
脚本中用死码定位
3. 完成如上步骤,便可下硬件断点而不被弹出错误提示
因为是易语言程序,很快找到了oep: 0x45D4F6
至于IAT修复,硬件断点解决了,所以可以很快的进行定位,关键代码如下:
004C64E5 8908 mov dword ptr , ecx ; 数据存到iat中
004C656D 53 push ebx
004C656E FFB5 4AD34000push dword ptr
004C6574 FF95 E0BA4000call dword ptr ; kernel32.GetProcAddress
004C65B1 8907 mov dword ptr , eax ; 地址存到中,edi==iat表
作业中有二种方法的od脚本. ps: 在群里说修复昨后跨不了平台,后来检查了下,原因是我脚本少了个判断引起的.....
下载地址:http://share.weiyun.com/519c84ce88bc5e3181d8fce16978d20d(密码:9bJ4)
本帖最后由 一_岁_就_很_帅 于 2015-10-16 00:13 编辑
用最后一次异常法到oep,这个很简单,但是写脚本费了好大的力,在论坛各种找脚本的命令。
最后是修复IAT这个真是累死人啊!
以脱壳:http://pan.baidu.com/s/1mgxnX6S