Emil 发表于 2013-3-8 15:10

简单还原某Cm一句IF命令 适合新手,vm初学者

[转]简单还原某Cm一句IF命令
-------------------------------------------------【文章简介】-------------------------------------------------
【文章标题】 简单还原某Cm一句IF命令
【文章作者】 SoySauce
【作者邮箱】
【作者主页】HtTp://Hi.BaiDu.Com/c3kSoySauce
【软件名称】 明码比较无壳
【软件大小】 36k
【下载地址】 http://good.gd/2459585.htm
【加壳方式】 无
【保护方式】 一句语句Vm
【编写语言】 Microsoft Visual C++ 6.0
【使用工具】 OllyDbg
【操作平台】 Xp
【软件介绍】 一个只有一句If语句的明码比较Crack Me 群里某位放出来娱乐的
【作者声明】 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
-------------------------------------------------【文章正文】-------------------------------------------------
前言,也许是世界上最简单的Crack Me了 只有一句If 判断编辑框内容 然后MessageBox提示是否成功
在看这篇文章之前 我想说的是 虽然是最简单的 但是考验的是基础 基础扎实了 后期才可以走自己的路
懂Vc和汇编的 也许只是分分钟就可以把这句代码还原 当然F5更容易 这里我说的是在OLlydbg里手工处理
这段vm代码
原始的语句 我们脑海里直接可以构思

void CtazDlg::ONOK()
{
// TODO: Add extravalidation here
   updatedata(TRUE)
If (m_1=="???????")   编辑框内真码
{
   MessageBoxA("??");信息框提示内容
}
}

载入OllyDbgCtrl+B FF25来到 004015A0   .- FF25 74214000 jmp dword ptr ds:[<&MFC42.#4673>]      ;mfc42.#4673
往下拉一般像这种最原始的IF语句Cm 最后面两个就是我们所需要的#4224 为信息框 #6334为编辑框
如果你觉得有疑问 你可以自己编译一个 然后载入OllyDbg查看 会发现都是如此
004017AA   .- FF25 64214000 jmp dword ptr ds:[<&MFC42.#4224>]      ;mfc42.#4224信息框
004017B0   .- FF25 68214000 jmp dword ptr ds:[<&MFC42.#6334>]      ;mfc42.#6334编辑框内容
往上看 If语句Vm起始地址 00401550   .- E9 E2600000   jmp 明码比较.00407637
结束地址 0040157E   .D2CE          ror dh,cl
找到了上面我们需要的两个最重要的我们现在就来手工处理吧还是那句话 需要基础
00401550 处 push esi
00401550    56            push esi
00401551    8BF1            mov esi,ecx
00401553    6A 01         push 0x1
00401555    E8 56020000   call <jmp.&MFC42.#6334>
0040155A    8B46 60         mov eax,dword ptr ds:
0040155D    90            nop
0040155E    90            nop
0040155F    E8 123E0000   call 明码比较.00405376
00401564    F9            stc
00401565    98            cwde
00401566    F9            stc
00401567    83EC DC         sub esp,-0x24
0040156A- 0F84 0C580000   je 明码比较.00406D7C
00401570    F8            clc
00401571    83ED 04         sub ebp,0x4
00401574- E9 83590000   jmp 明码比较.00406EFC
00401579- E9 D9590000   jmp 明码比较.00406F57
0040157E    D2CE            ror dh,cl
代码如上 此时我们需要找到编辑框Hex内容push 地址
也就是我们需要在0040155d处修改的地址
Ctrl+F2 重新载入 F9运行Ctrl+G输入_mbscmp 下段 点击CM的确定断下 看堆栈
0012F8AC   00407672/CALL 到 _mbscmp
0012F8B0   73DFC710|s1 = ""
0012F8B4   00403024\s2 = "548484"
0012F8B8   73DCF07Coffset mfc42.#4234
0012F8BC   73D323EB返回到 mfc42.73D323EB
0012F8C0   73DCF07Coffset mfc42.#4234
0012F8C4   00000111
得到403024 与_mbscmp
Ollydbg 数据窗口Ctrl+G 来到403024 找到403020 至此我们需要的一些字节已经找完
继续上步0040155d处 Push 00403024
push eax
_mbscmp函数
add esp,08
test eax,eax
jnz 0040157e
push eax
push eax
push 00403020
mov ecx,esi
call 4224
pop esi
retn
结束 扩展下爆破吧
载入Ollydbg _mbscmp断点 确定断下后 Ctrl+F9F8一次来到 00407672处
赋值寄存器 Eax为0 即可
关于写代码 找程序空代码处 比较Eax处指向空代码 然后跳回保持堆栈平衡即可
没什么技术含量 让大家见笑了

-------------------------------------------------【版权声明】-------------------------------------------------
【版权声明】 本文由本人原创, 转载请注明作者并保持文章的完整, 谢谢!



原帖地址:http://hi.baidu.com/c3ksoysauce/item/f01a5460939eaf2fa1cf0f94

















Emil 发表于 2013-3-8 15:11

沙发自己做!~求热心,每天不用也浪费啊!·呵呵

qq919740 发表于 2013-3-8 15:22

我就是新手...

℡Black星辰 发表于 2013-3-8 15:25

表示必须支持!

y65980 发表于 2013-4-7 13:48

学习了 ·····

dmxayjn 发表于 2013-6-4 15:45

晕乎乎的,看不懂

马斯维尔 发表于 2013-9-13 13:41

这篇文章写得真好! 不过我基础太差,这些patch的代码确实需要基础啊。 只能照着做出来。
页: [1]
查看完整版本: 简单还原某Cm一句IF命令 适合新手,vm初学者