【交作业贴】吾爱破解培训第十课交作业专帖
前提介绍:《吾爱破解培训第十课:探寻逆向新航标---x64平台脱壳与破解实战》 讲师:Kidohttp://www.52pojie.cn/thread-422192-1-1.html
请大家用课程学到的知识,对加壳的作业进行脱壳和编写脱壳脚本,并破解/逆出KEY,脱壳脚本可以直接上传,脱壳成品可以上传网盘贴地址,节省论坛空间就不要上传到论坛了。
作业截至到2015年10月25号00:00前提交算数,没有加报名群的同学也可以提交,后期会通过作业的提交情况,来淘汰没有交作业的,让交作业的新人加入。
对于作业的解答我已经更新到上面培训贴中,作业遇到问题的可以参考一下。
帖子我设置只有我可见,等一周后取消,切记不要回复和作业无关内容,否则会被扣分,前50个名交作业的同学有奖励。
脱壳很简单,和教程一样。
破解,运行下断点 bp MessgeBoxA,输入52PoJie.Cn,check
断在
00007FFD1C8236A0 | sub rsp,38 |
00007FFD1C8236A4 | xor r11d,r11d |
00007FFD1C8236A7 | cmp dword ptr ds:,r11d |
00007FFD1C8236AE | je user32.7FFD1C8236DE |
00007FFD1C8236B0 | mov rax,qword ptr gs:
看堆栈返回到 00000001400010EB
00000001400010E6 | E8 15 FF FF FF | call 140001000 |
00000001400010EB | EB F1 | jmp 1400010DE
重载,跟进call 140001000 ,找到key的计算
000000014000101B | call qword ptr ds:[<&GetDlgItemTextA>]|
0000000140001021 | cmp byte ptr ds:,0 | ;比较长度是否=0
0000000140001028 | je 140001060 |
000000014000102A | lea rdx,qword ptr ds: | ;140015820:"52KjEd`.>i"
0000000140001031 | mov cl,byte ptr ds: | ;取一字节
0000000140001033 | lea eax,dword ptr ds: |
0000000140001036 | cmp al,19 | ;大于19则跳
0000000140001038 | ja 140001042 |
000000014000103A | sub cl,5 |
000000014000103D | cmp cl,7A |
0000000140001040 | jmp 14000104F |
0000000140001042 | lea eax,dword ptr ds: |
0000000140001045 | cmp al,19 | ;大于19跳
0000000140001047 | ja 140001058 |
0000000140001049 | sub cl,5 |
000000014000104C | cmp cl,5A |
000000014000104F | mov byte ptr ds:,cl |
0000000140001051 | jle 140001058 | ;小于等于7A跳
0000000140001053 | sub cl,1A |
0000000140001056 | mov byte ptr ds:,cl |
0000000140001058 | inc rdx |
000000014000105B | cmp byte ptr ds:,0 |
000000014000105E | jnz 140001031 |
计算完,比较
0000000140001060 | lea rdx,qword ptr ds: | ;140015820:"52KjEd`.>i"
0000000140001067 | lea rcx,qword ptr ds: | ;1400112F0:"52PoJie.Cn"
000000014000106E | call 14000B900 | ;与计算后的比较
0000000140001073 | mov rcx,rbx |
0000000140001076 | test eax,eax |
0000000140001078 | jnz 14000108D | ;不等跳走
000000014000107A | xor r9d,r9d |
000000014000107D | lea r8,qword ptr ds: | ;1400112FC:"Boom!"
0000000140001084 | lea rdx,qword ptr ds: | ;140011308:"Congratulations! You have successfully Registered"
000000014000108B | jmp 1400010A1 |
000000014000108D | mov r9d,10 |
0000000140001093 | lea r8,qword ptr ds: | ;140011340:"Boomshakalaka"
000000014000109A | lea rdx,qword ptr ds: | ;140011350:"You Failed!"
通过计算得出注册码:52UtOnj.Hs
附上易语言计算代码
.版本 2
.子程序 逆向key
.局部变量 i, 整数型
.局部变量 pass, 字节集
.局部变量 x, 整数型
.局部变量 al, 字节型
.局部变量 rcx, 整数型
.局部变量 cl, 字节型
.局部变量 key, 文本型
pass = 到字节集 (“52PoJie.Cn”)
.计次循环首 (10, i)
.计次循环首 (255, x)
rcx = 十六进制 (“FFFFFF00”) + x
cl = rcx
al = rcx - 十六进制 (“61”)
.如果真 (al ≤ 十六进制 (“19”))
cl = cl - 5
.如果真 (al > 十六进制 (“7A”))
al = al - 十六进制 (“1A”)
.如果真结束
.如果真结束
al = rcx - 十六进制 (“41”)
.如果真 (al ≤ 十六进制 (“19”))
cl = cl - 5
.如果真 (cl > 十六进制 (“5A”))
cl = cl - 十六进制 (“1A”)
.如果真结束
.如果真结束
.如果真 (pass = cl)
pass = x
跳出循环 ()
.如果真结束
.计次循环尾 ()
.计次循环尾 ()
key = 取字节集数据 (pass, #文本型, )
输入框 (“获取的注册码是:”, “提示”, key, key, , )
脱壳成品
链接:http://pan.baidu.com/s/1pJ5VFBl 密码:01yw
x64位平台下的Mpress壳的脱壳破解笔记:
===========
1.指令起始部分:
000000014001B0C0 | 57 | push rdi |
000000014001B0C1 | 56 | push rsi |
000000014001B0C2 | 53 | push rbx |
000000014001B0C3 | 51 | push rcx |
000000014001B0C4 | 52 | push rdx |
000000014001B0C5 | 41 50 | push r8 |
-------------------------------------------------------------------------------
那么指令结束部分:
| pop r8
| pop rdx
| pop rcx
| pop rbx
| pop rsi
| pop rdi
-------------------------------------------------------
单步后发现指令结束部分与上面一毛一样:
0000000140011D12 | 41 58 | pop r8 |
0000000140011D14 | 5A | pop rdx |
0000000140011D15 | 59 | pop rcx |
0000000140011D16 | 5B | pop rbx |
0000000140011D17 | 5E | pop rsi |
0000000140011D18 | 5F | pop rdi |
二进制:41585A595B5E5F
------------------------------------------------------------------------------
2.
000000014001BB9A | 41 5F | pop r15 |
000000014001BB9C | 41 5E | pop r14 |
000000014001BB9E | 41 5D | pop r13 |
000000014001BBA0 | 41 5C | pop r12 |
000000014001BBA2 | 5F | pop rdi |
000000014001BBA3 | 5E | pop rsi |
000000014001BBA4 | 5D | pop rbp |
000000014001BBA5 | 5B | pop rbx |
000000014001BBA6 | C3 | ret |
二进制:415F415E415D415C5F5E5D5BC3
OEP:0000000140001180 | 48 83 EC 28 | sub rsp,28 |
search references:you failed
0000000140001078 | 75 13 | jnz 14000108D | ------------->nop
脚本编写:
//Script to Unpack MPress On x64 dbg
//Author:Roi
find rip,"415F415E415D415C5F5E5D5BC3"
mov first_jmp,$result
add first_jmp,D
bp first_jmp
erun
bc
sti
find rip,"41585A595B5E5F"
mov second_jmp,$result
add second_jmp,7
bp second_jmp
erun
sti
msg "this is oep"
ret
链接: http://pan.baidu.com/s/1pJ1SkWj 密码: 9d93
eg:只爆破了,key应该是52PoJie.Cn
本帖最后由 呲花哥c 于 2015-10-19 15:03 编辑
虽然我看不懂作业 学的语言不通 但还是顶下楼主
支持一下,正在做 64位的脚本母鸡怎么写呀,K洞大也没教我们。。。
Unpack:
http://yunpan.cn/cFrd6easxuV6S访问密码 1c66
只有一个虚拟机64位的所以也没测试跨平台了,感觉应该OK的才是
Key:Fuck L4 好像是这个 交作业啦先上注册码
52UtOnj.Hs
算法,"52PoJie.Cn"每位ascii码+5
脚本,最后一点单步按说应该一个即可,但是我这里x64dbg可能存在一些问题,需要两个,为了通用,故加了个判断。
sti
bphws rsp,"r"
erun
bphwc rsp-8
mov old,rip
loop:
sti
cmp old,rip
jz loop
ret
本帖最后由 niuniu919 于 2015-10-19 19:43 编辑
第八九课由于电脑原因没有仔细研究,所以写脚本还很吃力,先破解了再研究写脚本。使用爆破的方法。
爆破版成品:http://pan.baidu.com/s/1mgkxeHU
英文太差x64用着太坑了
链接:http://pan.baidu.com/s/1i3tW8Zz 密码:i8zc {:301_1008:}看了下群里,才知道原来作业更新了。。。
不过脱法还是类似的没啥好说
Key:52UtOnj.Hs 本帖最后由 黑的思想 于 2015-10-20 19:14 编辑
注册码:52UtOnj.Hs
爆破版(已经脱壳)作业地址:http://pan.baidu.com/s/1mgISZDQ
没有一份脚本命令的帮助文件,还真是难写
sti
BPHWS rsp,"r"
erun
bphwc
sti
sti
MSG "THIS IS OEP !"
RET