-
-
[原创]简单分析“WannaLOL”注册码 大牛路过。新手勿进。斑竹置顶!!
-
2017-6-1 21:25
4702
-
[原创]简单分析“WannaLOL”注册码 大牛路过。新手勿进。斑竹置顶!!
原题地址:http://ctf.pediy.com/?game-fight-31.htm
1.载入OD后 BP GetWindowTextA 下断,
2.F9 运行,
3.随便输入一个字符串(尽量不要相同)我这里就输入123456
点击(Register)此时被断下。CTRL+F9 执行到返回。一直返回到程序领空。
单步走几下发现如下信息:
这就说明,注册吗在这段代码之间进行了一个判断。现在只要分析中间这段代码就ok!为什么是这样?
下面具体来说明下,首先下断的是GetWindowTextA这个API。这个API简单的理解就是获取用户输入文本的一个函数。MessageBoxA弹出消息框。不管成功失败给出提示信息。由此我们可以分析出。注册码在中间这段代码之间进行了比较。所以分析中间这段就ok.清楚了这点之后 我们就在返回到程序领空的第一行下断。
在点击注册按钮。
断在这个位置。单步F8.
下面这个CALL传入我们输入的注册码。先不管他。路过(步过)。因为下这个call的返回值和4进行了比较猜测他是获取输入注册码长度的一个函数。在看看后面又有4个和CL比较。而这个EBP-1C这个地址,指向的是我们输入的中注册码的ascii的值。
00401232 · 384D E4 CMP BYTE PTR SS:[EBP-1C], CL
00401235 ·▼ 0F84 94000000 JE WannaLOL2.004012CF
0040123B · 384D E5 CMP BYTE PTR SS:[EBP-1B], CL
0040123E ·▼ 0F84 8B000000 JE WannaLOL2.004012CF
00401244 · 384D E6 CMP BYTE PTR SS:[EBP-1A], CL
00401247 ·▼ 0F84 82000000 JE WannaLOL2.004012CF
0040124D · 384D E7 CMP BYTE PTR SS:[EBP-19], CL
为了使这段中的跳转不实现。(假如实现了就提示注册失败"ERROR")
注册码长度为4位切ascii的值不是30(0).
接着之后是。和31 35 比较。31对应的是1 35对应的是5(可以查ascii对照表)
说明注册码第一位和第二位为 31(1)、35(5).
将注册码改为“1534”(本着不重复的原则)高低位对新手朋友不好区分。不重复的话就很容易分辨出是第几位。
接着单步往下看
由于上面的代码并没有对ebp进行赋值。所有ebp-1c还是只想注册码ascii的地址
这里过程大致和上面一段差不多,变成浮点运算而已。逐位去除ASCII值 减去30 参与后面的计算。
计算结果等于384则注册成功。
总结下就一个方程式 (x-0.2)*y=384/16=24(384除以16等于24)
16在这里是个浮点常量
x ,y 分别是第三四位的ASCII值减去30
简化下方程式 xy+0.8y=24 这里x=x+1;这里很明显就能看出来y是等于5的。首先ascii没有小数 切x y是小于10的
且不等0的。 所以满足0.8y是个整数的只有5.然后可以算出x=4。前面是说了x=x+1所以x=5;所以ascii码为35(5) 35(5)
注册码为1555
好吧。既然你不服那就用段代码来证明下
最后如图:
[培训]二进制漏洞攻防(第3期);满10人开班;模糊测试与工具使用二次开发;网络协议漏洞挖掘;Linux内核漏洞挖掘与利用;AOSP漏洞挖掘与利用;代码审计。