最后发一个CM
成功有明显的信息框提示,追码爆破随意
追码要把key文件发上来
爆破要发过程。
本帖最后由 w1550441298 于 2017-6-25 06:35 编辑
追了半天 就这么一点有用的信息:
先检测PE头的重定位原始偏移+原始大小,比较文件大小和相加的结果。 然后在虚地址空间申请内存,然后从2800H字节后写入代码9310个字节的代码(也就是后面的全部写入),然后再继续申请48H个字节的空间,并存储申请的空间地址到4038B4地址处,然后把第一次申请的空间地址放入第二次申请空间地址+20H的地址处。然后创建线程,402000出存放着很多API,对应PE文件的600H-C51H。往下拉可以看到很多信息。然后往第二次申请的空间中写入信息。然后执行最关键的40280F处的CALL。
401000处的代码是验证是否更改402068处的代码,如果更改最终会跳过返回,最后执行到isdebugger(401000处往下拉可以看到)
40280f关键call 之后402D51下断点402D65下断点,F9执行会发现两个断点之间循环,而导致内存403884-403974之间的内容会被更改,402D51 F9执行第5次的时候堆栈会出现失败对话框,402D65执行第5次的时候会再次更改403884-403974之间的内容。
内存164218 是最终"失败!" Unicode编码的存放地址,F9运行到40280F断点之前这个地址会从7C930FF5处写入一次数据到164218。 第5次执行402D51断点的时候,会从7C930741先清零,后单步到77D1AE24处的CALL写入"失败!"对应的Unicode编码到地址164218,如果观看堆栈失败ASCII码的位置在7FF9759B会在7FF97588处看到注册成功!和失败!的ASCII码,而之后回到402D51之后的402d5e把4038A8处的代码入栈,然后retn实现调用MessageBox。
我们在第4次执行402D65的时候看到了失败和Message的字符串,然后跟踪到7FF9759B,然后看到上面的注册成功直接修改堆栈7FF9759B改成7FF97588,可以修改字符串的内容,但是只是表面更改,实际执行方式还是原来的执行方式,如果是实现一个功能,弹出这个对话框,修改这个并没有什么用,不过我是找不出来正确的执行路径了。以前修改过一个易语言外挂的栈内容,call eax的时候用过这个方法,虽然联网失败,弹出对话框,但是修改了retn调用的栈存储的失败的返回地址,改成了成功的地址(说来惭愧,成功的地址,还是借别人的帐号,正确执行了一遍才找到)。不过最后实现的是不管是联网失败,密码失败,都可以直接爆破。但是这个程序只是改了字符串的,并没有找到正确的执行路径。等到大牛来破解学习。
本帖最后由 zbnysjwsnd8 于 2017-6-26 17:32 编辑
panwanpeng 发表于 2017-6-26 16:48
弄了几天弄不出来,感觉自己白学了,后来发现好多大神也弄不出来,心里有点慰藉,评个爱心分。
我不信。
大神肯定都秒了。或者根本就不玩我的,觉得拉低智商 {:1_921:}厉害了,我的哥 不懂.... 不懂啊,,, 别告诉我是Hello World!
w1550441298 发表于 2017-6-24 22:00
别告诉我是Hello World!
{:1_910:}恩 不是 做个假行不行
对于我这种脱壳都脱不开的,真是悲催
我也跳出了个Hell,world!