alading writeup —— 代码动态变化

Hint

暂无HINT

题目描述:

阿拉灯的神丁 (╯‵□′)╯︵┻━┻

 

Writeup:

IDA分析流程得:

0x0041204C处的256字节数据与输入的8字节key进行循环异或,结果覆盖0x0041204C处原始数据。

把0x00401000作为基址,0x0041204c处的数据依次作为偏移地址,把0x0041214c处的数据依次作为原始数据写入前面构造的地址中。

mov     ecx, [ebp+var_10]
xor     edx, edx
mov     dl, byte_41204C[ecx]
mov     eax, offset loc_401000
mov     ecx, [ebp+var_10]
mov     cl, byte_41214C[ecx]
mov     [eax+edx], cl
jmp     short loc_401266</span>

写入完成后call    loc_401000

最初感觉没有地方下手啊,把原始数据写入目标地址中,可是目标地址是与输入的key有关,这怎么破……

后来猜测0x00401000处开始的语句肯定是push  ebp之类的,可是这也凑不够256字节啊,后来找大神指点。大神说观察函数的头和尾,整个程序中的函数头尾形式都是一样的,可以根据其他函数确定0x00401000处的数据。

这是0x00401101处的代码,即写入256字节数据后面的代码:

pop     edi
pop     esi
pop     ebx
add     esp, 58
cmp     ebp, esp
call    00401350
mov     esp, ebp
pop     ebp
ret</span>

再观察其他函数的开头格式,后猜测256字节数据中前9个字节代码为:

55		push	ebp
8B EC           mov	ebp, esp
83 EC 58	sub	esp, 58
53		push	ebx
56		push	esi
57		push	edi</span>

想要的东西都有了,可是编程功底太差,写不出解密代码,只好手工解密。

1D8/*55h	196 19E 1B0 1D8 1FA
22E/*8Bh	153 178 18C 192 1AA 1AB 1AF 1B3 1DE 1EB 20C 20D 211 22E 238
19F/*ECh	19F 
171/*83h	164 169 16C 16F 171 17A 1EE 212 228 231 246
1EA/*ECh	1EA
1DB/*58		1A0 1DB 222
167/*53		15B 167
1DD/*56		1DD
1FD/*57		1FD		注:这些地址省略了前缀0x00412</span>

比如第一个字节55h,虽然在0x0041214c~0x0041224c中有多处数据为55h,可是只有1D8h即0D8h处的6Fh像是0~8中的某个数字与某个字母异或而得的数据。

可能表达的有些不清楚,假设1D8h处的55h就是最终写入0x00401000处的数据,那么0D8h处的6Fh与key中的第[(0D8h-04Ch+1)% 8 = 5]个字符异或后为0。

最终结果:

A B C D - E F G H
  e l l   o z m g
E XOR 6Fh = 0
C XOR 6Dh = 1
D XOR 6Eh = 2
F XOR 79h = 3
G XOR 69h = 4
H XOR 62h = 5
D XOR 6Ah = 6
B XOR 62h = 7
B XOR 6Dh = 8</span>

还少第一位,猜测是“H”,然后key就是“Hellozmg”,然后就猜对了……

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值