CrackMe技术等级自测3级一个CrackMe分析
来源:互联网 发布:一洋电商软件 编辑:程序博客网 时间:2024/05/29 12:56
几天前EvilKnight在看雪发了一个CrackMe技术等级自测系统(http://bbs.pediy.com/showthread.php?t=147054),正好当时候我也看到了就下下来玩了下;说过了三级推荐6K的工作,不过由于我技术太菜,第三关完全不知道如何分析。其实我也一直想玩玩CrackMe(正好最近Crackmes.de重新开放了),但还是感觉太浮躁了,另外业余时间也很少了,所以依旧很菜。今天看到论坛上有人发了分析报告,觉得分析得很不错,所以转了过来。
原帖地址:http://bbs.pediy.com/showthread.php?p=1052032
作者:cpfive
1. 用到的工具
peid 查壳, depends 查看导入函数, ida (idapython)静态分析
2. 开始
下载完这个Crack me后一看才7kb, 先用peid查壳,什么也没有,Win32控制 台程序。 然后用depends查看导入函数,只有7个,不确定是否加壳。 先用od来调下吧。载入之后,傻了,全是问号,看来有od反汇编引擎不能识别的指 令。如下图:
3. IDA分析
ida只分析出了开头的代码,后面的就没有了。如下图:
看到IDA识别出了开头的机器码,nop dword ptr [eax+233CFAA6h] nop后面还能带操作码? 查查Intel手册,原来是多字节nop。各种多字节nop如下表:
Length AssemblyByte Sequence
2 bytes 66 NOP 66 90H
3 bytes NOP DWORD ptr [EAX] 0F 1F 00H
4 bytes NOP DWORD ptr [EAX + 00H] 0F 1F 40 00H
5 bytes NOP DWORD ptr [EAX + EAX*1 + 00H] 0F 1F 44 00 00H
6 bytes 66 NOP DWORD ptr [EAX + EAX*1 + 00H] 66 0F 1F 44 00 00H
7 bytes NOP DWORD ptr [EAX + 00000000H] 0F 1F 80 00 00 00 00H
8 bytes NOP DWORD ptr [EAX + EAX*1 + 00000000H] 0F 1F 84 00 00 00 00 00H
9 bytes 66 NOP DWORD ptr [EAX + EAX*1 + 00000000H] 66 0F 1F 84 00 00 00 00 00H
nop只是修改eip,后面的操作数毫无作用。这里的多字节nop纯粹是让人混乱的。 整段代码真正起作用的只有:
push offset loc_40103E
retn
就是跳转到40103E处,在0x40103E处按’c'直接把数据转换为代码。 继续分析,又是混淆代码,一堆无用操作,继续寻找地址手工转换成代码,找出一部分代 码后,我们来分析下这些混淆代码的特征,争取用脚本来自动分析代码。 这个crack me的混淆比较简单,只有几种模式,找出来总结如下:
nop mem ;纯粹占地方的,可以同时有多行noppush reg1
xchg reg2,[esp]
pop reg2 ;等于什么都没有做, 其中任何一行都可能有上面一种混淆
;也会有jz jnz和push offset ret形式的混淆夹在其中push eax
push edx
rdtsc ;rdtsc会改变edx, eax
pop edx
pop eax ;其中任何一行中间都可能会有上面2种混淆jz xxx
;上面的三种混淆
jnz xxx ;等同于jmppush offset
;上面三种的混淆
retn ;还是jmp
4. IDAPython脚本编写
根据总结出来的规律,我们就可以写脚本来代替手工了。 代码如下:(略,具体看附件)
脚本并不完美,因为是一个分支解析的,碰到选择分支的话,就会顺序选择一个 分支,所以要多跑几遍脚本(在没有被脚本处理过的分支上)。 跑完脚本后程序流程就出来了,寻找爆破点,或者注册算法就方便了。 脚本跑完后如下图:
5. 分析
如果用户名等于2个字母或大于10个字母,登录错误 用户名等于’shadow’,'lamer’,guest’登录错误 如果用户名等于密码, 获得了guest权限。 检查权限的函数是0x401E87,非常简单,只是计算密码中含有’S'的个数。 最后如果密码中含有4个’S',则是guest权限,超过4个,就是root权限。
6. 总结
这个crack me 主要是练习静态分析,学习简单的代码混淆。
附件中有带代码着色的html版,和crackmelv3的程序和idb文件。点击下载附件。
P.S. 关于RTDSC指令:http://www.pediy.com/kssd/pediy07/pediy7-510.htm
--------------------------------------------------------------------------------
本博客很少转载他人文章,如未特别标明,均为原创,转载请注明出处:
本文出自程序人生 >> [转]CrackMe技术等级自测3级一个CrackMe分析
Copyed From 程序人生
Home Page:http://www.programlife.net
Source URL:http://www.programlife.net/crackme-3-analysis.html
- CrackMe技术等级自测3级一个CrackMe分析
- CrackMe等级自测(3)
- 一个CrackMe的分析
- 一个简单的CrackMe分析
- 一个简单的CrackMe分析
- Crackme 3
- 一个简单CrackMe分析+keyGen编写
- 一个含有crc32算法的CrackMe分析
- No.1 入门级CrackMe分析
- CrackMe的算法分析
- Android Crackme分析
- crackMe的逆向分析
- 一个CrackMe核心代码的不完整分析
- Duelist's Crackme #3
- 160crackme-3
- CrackMe--cffo-3
- 170526 逆向-CrackMe(3)
- 无提示CrackMe算法分析
- 一个简单的CrackMe分析
- HTML5续
- vm虚拟机安装dos6.22
- 实习日志(6):Flex显示Servlet所传值
- 编译器对switch case结构的优化
- CrackMe技术等级自测3级一个CrackMe分析
- hdu 1074 Doing Homework
- iOS开发icon图片尺寸大小官方说明
- 关联规则学习-序列模式挖掘
- 对想了解某个领域的初学者来说最值得推荐的一本书
- Android系统常用隐藏命令大全
- 重力感应调试记录
- Guava 库整理
- 页缓存回写时,导致sync阻塞的问题