好友
阅读权限40
听众
最后登录1970-1-1
|
Emil
发表于 2013-3-8 15:10
[转]简单还原某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 extra valIDAtion here
updatedata(TRUE)
If (m_1=="???????") 编辑框内真码
{
MessageBoxA("??"); 信息框提示内容
}
}
载入OllyDbg Ctrl+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:[esi+0x60]
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 73DCF07C offset mfc42.#4234
0012F8BC 73D323EB 返回到 mfc42.73D323EB
0012F8C0 73DCF07C offset 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+F9 F8一次来到 00407672处
赋值寄存器 Eax为0 即可
关于写代码 找程序空代码处 比较Eax处指向空代码 然后跳回保持堆栈平衡即可
没什么技术含量 让大家见笑了
-------------------------------------------------【版权声明】-------------------------------------------------
【版权声明】 本文由本人原创, 转载请注明作者并保持文章的完整, 谢谢!
原帖地址:http://hi.baidu.com/c3ksoysauce/item/f01a5460939eaf2fa1cf0f94
|
免费评分
-
查看全部评分
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|