170615 逆向-10000000

来源:互联网 发布:程序员教程第四版pdf 编辑:程序博客网 时间:2024/06/03 20:13

1625-5 王子昂 总结《2017年6月15日》 【连续第256天总结】

A.实验吧题目-10000000

B.先拖入PEiD,显示Unknown和yoda's Protector v1.02

查了一下,似乎是PEiD的数据错误导致无壳或是无法识别的壳都显示为这个

不管了,先放入OD里运行试试吧

成功加载,DOS窗口显示“喵?”

嗯……大概是让输入的意思吧?随便输入了123进去,显示wrong

命令行的程序没有调用WIN32的API,反而不太好下断,只能查找参考字符串了……

只不过最早只会查找字符串的时候经常遇到查找不到有用的字符串,所以不敢太依赖这个方法

还好这次查找到了三个字符串:喵?、good、和wrong

那么很明显,“喵?”就是输入提示,后面两个分别是正确和错误提示了

双击good,把该地址前的jnz给NOP掉,再运行,爆破成功

这种没有Name输入的纯注册机是最简单的了,因为Serial不会变化

在jnz前面有一个strcmp和test eax,eax的命令,那么很明显就是利用strcmp进行字符串比对了

在这个API处下断,再运行以后看栈堆里的参数却是两个乱码字符串,看来进行处理了,那没办法,只能乖乖看了

从输入的地方往下跟,发现它的处理流程很简单:取一个字节,与-0x80进行按位异或运算,结果覆盖原内存,然后循环,直到取出的字节ASCII为0结束

strcmp的一个参数是处理过后的输入的内容,另一个参数是固定的值:

0029FEE4  E6 EC E1 E7 BA F4 E5 F3 F4 F4 E5 F3 F4           骒徵呼弩趑弩?..
那么
只要对其做-0x80异或的逆运算就可以找到正确明码了

查询得知异或的逆运算就是再异或,用py写一个即可:

a=[0xE6,0xEC,0xE1,0xE7,0xBA,0xF4,0xE5,0xF3,0xF4,0xF4,0xE5,0xF3,0xF4]s=""for i in a:    s=s+chr(i^0x80)print(s)
输出得到:flag:testtest

验证输入,good√

C.明日计划

CrackMe(24)

原创粉丝点击