L4Nce 发表于 2015-10-15 11:37

【交作业贴】吾爱破解培训第九课交作业专帖

前提介绍:
《吾爱破解培训第九课:短兵相接--深入浅出探讨脱壳细节(下)》 讲师:L4Nce http://www.52pojie.cn/thread-420354-1-1.html

请大家用课程学到的知识,对加壳的作业进行脱壳和编写脱壳脚本,脱壳脚本可以直接上传,脱壳成品可以上传网盘贴地址,节省论坛空间就不要上传到论坛了。

作业截至到2015年10月22号00:00前提交算数,没有加报名群的同学也可以提交,后期会通过作业的提交情况,来淘汰没有交作业的,让交作业的新人加入。

对于作业的解答我已经更新到上面培训贴中,作业遇到问题的可以参考一下。

帖子我设置只有我可见,等一周后取消,切记不要回复和作业无关内容,否则会被扣分,前50个名交作业的同学有奖励。

beyondmk2001 发表于 2015-10-16 10:03

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

clf7691782 发表于 2015-10-15 17:38

谢谢分享。学习了!

苏紫方璇 发表于 2015-10-15 11:57

本帖最后由 苏紫方璇 于 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

蚯蚓翔龙 发表于 2015-10-15 13:32

http://yunpan.cn/cFwumyRthitBp访问密码 7f45
一岁就很帅呀{:1_903:}

小范 发表于 2015-10-15 13:32

作业:
http://yunpan.cn/cFwuFqR59fSDV (提取码:e64c)

黑的思想 发表于 2015-10-15 14:03

本帖最后由 黑的思想 于 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

liangyi 发表于 2015-10-15 19:50

我来学习学习~看看楼主的进度!

凌云9 发表于 2015-10-15 20:48

本帖最后由 凌云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



专业烤提莫 发表于 2015-10-15 21:12

交第八九课作业前先补交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:11

本帖最后由 一_岁_就_很_帅 于 2015-10-16 00:13 编辑

用最后一次异常法到oep,这个很简单,但是写脚本费了好大的力,在论坛各种找脚本的命令。
最后是修复IAT这个真是累死人啊!

以脱壳:http://pan.baidu.com/s/1mgxnX6S







页: [1] 2 3 4
查看完整版本: 【交作业贴】吾爱破解培训第九课交作业专帖