吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3387|回复: 7
收起左侧

[CrackMe] 【吾爱2013CM大赛解答】-- xjunCM2013 --xjun

[复制链接]
playboysen 发表于 2013-12-24 20:45
CM是什么?Crackme是什么?这是什么东西?楼主发的什么?
他们都是一些公开给别人尝试破解的小程序,制作 Crackme 的人可能是程序员,想测试一下自己的软件保护技术,也可能是一位 Cracker,想挑战一下其它 Cracker 的破解实力,也可能是一些正在学习破解的人,自己编一些小程序给自己破解,KeyGenMe是要求别人做出它的 keygen (序号产生器), ReverseMe 要求别人把它的算法做出逆向分析, UnpackMe 是要求别人把它成功脱壳,本版块禁止回复非技术无关水贴。

本帖最后由 playboysen 于 2013-12-24 20:52 编辑

本文针对以下CM:
http://www.52pojie.cn/thread-228499-1-1.html

看图标就知道是易语言了(结合字符串查看更加确定,因为模块封装易语言里面字符串比较乱),既然这样也懒得慢慢跟
打开“E逆工程师”找找按钮事件,轻松定位0041A34D,跟进看看

[AppleScript] 纯文本查看 复制代码
0040140A  /.  55                 push ebp
0040140B  |.  8BEC               mov ebp,esp
0040140D  |.  68 04000080        push 80000004
00401412  |.  6A 00              push 0
00401414  |.  68 98EE4700        push Easy_Cra.0047EE98        ;  ASCII ":("
00401419  |.  68 01030080        push 80000301
0040141E  |.  6A 00              push 0
00401420  |.  68 10000000        push 10
00401425  |.  68 04000080        push 80000004
0040142A  |.  6A 00              push 0
0040142C  |.  68 9BEE4700        push Easy_Cra.0047EE9B        ;  注册失败!
00401431  |.  68 03000000        push 3
00401436  |.  BB D0194000        mov ebx,Easy_Cra.004019D0
0040143B  |.  E8 46000000        call Easy_Cra.00401486        ;  MessageBox
00401440  |.  83C4 28            add esp,28
00401443  |.  8BE5               mov esp,ebp
00401445  |.  5D                 pop ebp
00401446  \.  C3                 retn

傻了,颠覆常识?!这个“Register”按钮只要点击就直接提示注册失败
想不通啊,所谓“思路决定出路”可当思路走进死胡同,人生就进入了短暂的悲剧……

压根不存在合法性验证??应该不会,这种耍无赖的做法为人不耻
既然有验证而又不是点击“Register”才开始验证,那是不是在输入时就一直在验证??这样的话程序需处理编辑框相应消息,输入时不断取编辑框文字

尝试下断点GetWindowTextA/W、GetDlgItemTextA/W虽然能够断下,但是F8一路小跑发现满眼尽是Switch,跳的花枝乱颤——受不鸟儿啊

没办法,翻翻题目原帖看看哪路神仙能给个思路先
果然看到了“多线程”几个字,瞬时如注鸡血——因为想起了几天前搞过的那个CM(Crack Me--RedAgl),程序注入其它进程写入关键验证代码

既然是多线程,可用断点有OpenProcess、VirtualAlloc、WriteProcessMemory、CreateThread、CreateRemoteThread等等
不过也不用煞费苦心找断点了(如果作者对INT3作了处理很可能断不下来),因为不涉及其它进程注入就简单直接点
OD加载程序F9运行,然后打开OD线程窗口找到关键线程的入口地址(具体操作见图)

[AppleScript] 纯文本查看 复制代码
100010FE    55                   push ebp
100010FF    8BEC                 mov ebp,esp
10001101    81EC 30000000        sub esp,30
......
1000115D    8945 FC              mov dword ptr ss:[ebp-4],eax
10001160    8965 DC              mov dword ptr ss:[ebp-24],esp
10001163    68 30B20010          push 1000B230                                      ; ASCII "Easy CrackMe by:Xjun"
10001168    68 45B20010          push 1000B245                                      ; ASCII "Window"
1000116D    FF15 18A10010        call dword ptr ds:[1000A118]                       ; USER32.FindWindowA
10001173    90                   nop
......
1000118F    68 4CB20010          push 1000B24C
10001194    68 4DB20010          push 1000B24D                                      ; ASCII "Edit"
10001199    68 00000000          push 0
1000119E    FF75 F8              push dword ptr ss:[ebp-8]
100011A1    FF15 14A10010        call dword ptr ds:[1000A114]                       ; USER32.FindWindowExA
100011A7    90                   nop
......
1000120E    8965 DC              mov dword ptr ss:[ebp-24],esp
10001211    FF15 34A00010        call dword ptr ds:[1000A034]                       ; kernel32.GetCurrentProcessId
10001217    90                   nop
......
10001236    68 00000000          push 0
1000123B    68 FF0F1F00          push 1F0FFF                                        ; ASCII "                 "
10001240    FF15 2CA00010        call dword ptr ds:[1000A02C]                       ; kernel32.OpenProcess
10001246    90                   nop
......
10001262    FF75 F0              push dword ptr ss:[ebp-10]
10001265    68 20000000          push 20
1000126A    68 0D000000          push 0D                                            ; WM_GETTEXT
1000126F    FF75 F4              push dword ptr ss:[ebp-C]
10001272    FF15 10A10010        call dword ptr ds:[1000A110]                       ; USER32.SendMessageA
......
100012A4    E8 C7050000          call 10001870                                      ; EAX = "www.52pojie.cn"
100012A9    83C4 10              add esp,10
100012AC    8945 DC              mov dword ptr ss:[ebp-24],eax
100012AF    8B45 DC              mov eax,dword ptr ss:[ebp-24]
100012B2    50                   push eax                                           ; "www.52pojie.cn"
100012B3    FF75 F0              push dword ptr ss:[ebp-10]                         ; 假码"playboysen"
100012B6    E8 A6FDFFFF          call 10001061                                      ; 这个Call,你懂的
100012BB    83C4 08              add esp,8
100012BE    83F8 00              cmp eax,0
100012C1    B8 00000000          mov eax,0
100012C6    0F94C0               sete al
100012C9    8945 D8              mov dword ptr ss:[ebp-28],eax
100012CC    8B5D DC              mov ebx,dword ptr ss:[ebp-24]
100012CF    85DB                 test ebx,ebx
100012D1    74 09                je short 100012DC
100012D3    53                   push ebx
100012D4    E8 3E010000          call 10001417
100012D9    83C4 04              add esp,4
100012DC    837D D8 00           cmp dword ptr ss:[ebp-28],0
100012E0    0F84 B4000000        je 1000139A                                        ; 这里直接跳到了CloseHandle
100012E6    8965 DC              mov dword ptr ss:[ebp-24],esp
......
10001377    50                   push eax
10001378    FF75 E4              push dword ptr ss:[ebp-1C]
1000137B    FF75 E0              push dword ptr ss:[ebp-20]
1000137E    FF15 28A00010        call dword ptr ds:[1000A028]                       ; kernel32.WriteProcessMemory
10001384    90                   nop
10001385    90                   nop
10001386    90                   nop
10001387    90                   nop
10001388    3965 DC              cmp dword ptr ss:[ebp-24],esp
1000138B    74 0D                je short 1000139A
1000138D    68 06000000          push 6
10001392    E8 86000000          call 1000141D
10001397    83C4 04              add esp,4
1000139A    8965 DC              mov dword ptr ss:[ebp-24],esp
1000139D    FF75 E0              push dword ptr ss:[ebp-20]
100013A0    FF15 00A00010        call dword ptr ds:[1000A000]                       ; kernel32.CloseHandle

通过API可知流程,简单来说线程通过不断发送WM_GETTEXT消息获取主程序Edit控件内容,然后与固定注册码"www.52pojie.cn"作比较,正确则作内存写入操作否则循环检查

爆破也容易,上面100012E0跳转直接NOP即可,不过由于是在线程中修改指令无法直接保存,可以打开OD内存映射窗口Ctrl+B搜索“0F 84 B4 00 00 0089 65 DC”来定位关键跳转在主程序中的位置(0x0046AF9E),找到后直接NOP即可保存爆破



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册[Register]

x

免费评分

参与人数 2热心值 +2 收起 理由
小试锋芒 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩.
Chief + 1 吾爱破解2013CM大赛,有你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

头像被屏蔽
281590720 发表于 2013-12-24 21:18
提示: 作者被禁止或删除 内容自动屏蔽
小试锋芒 发表于 2013-12-28 22:33
大牛分析的很精彩啊,学习了!能否传一份你的“E逆工程师”给我呢?多谢!!
GGLHY 发表于 2013-12-29 09:54
小试锋芒 发表于 2013-12-28 22:33
大牛分析的很精彩啊,学习了!能否传一份你的“E逆工程师”给我呢?多谢!!

围观大婶
求跟随您的脚步~
peerlesss_ 发表于 2014-1-8 02:22
这个CM一直困扰我很久了~谢谢大牛
吾爱扣扣 发表于 2014-1-28 11:15
GGLHY 发表于 2013-12-29 09:54
围观大婶
求跟随您的脚步~

求E逆工程师。。。。还有,那个你懂得的call是什么? @playboysen
 楼主| playboysen 发表于 2014-1-28 12:05
吾爱扣扣 发表于 2014-1-28 11:15
求E逆工程师。。。。还有,那个你懂得的call是什么? @playboysen

E逆工程师 在百度一搜可找到很多 易语言经常报毒 就不转过来了

字符串"www.52pojie.cn"和自己输入的假码"playboysen"同时传入某函数,那你猜下这个函数通常可能会做什么动作?
我估计要么连接两字符串,要么相互比较等等
再结合下面的cmp eax,0和sete al猜测就是类似lstrcmp了

算法分析未必需要跟进了解每一个call每一个指令含义
一路F8大概了解算法 事实为依据,加之经验和猜测最后一验证——对了!即可出注册机
(真正的注册机算法也未必和原作者源码算法完全一致,只要能运算出需要的结果即可)

点评

哦哦,谢谢指点  发表于 2014-1-28 12:47
吾爱扣扣 发表于 2014-1-28 12:53
playboysen 发表于 2014-1-28 12:05
E逆工程师 在百度一搜可找到很多 易语言经常报毒 就不转过来了

字符串"www.52pojie.cn"和自己输入的假 ...

E逆工程师百度下载回来,图标和你用的是一样的,一个Plugin文件夹一个主程序和一个key文件。双击主程序没反应。。 Win7 32

点评

那玩意是伟哥写的,52这边貌似很早就放出来了,upk那边也是有的  发表于 2014-1-28 13:33
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止回复与主题无关非技术内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-4-29 12:08

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表