|
且行且远
Archive for the ‘逆向手札’ Category先说一下,这个crackme已经很老了,也有无数人分析过这个简单的crackme了,我这个大菜鸟昨天晚上尝试着自己跟了一下,有点小收获,写出来,希望高手看不到我这个帖子,否则肯定要笑掉大牙了:) crackme文件的下载地址是:http://bbs.pediy.com/upload/files/1084801702.zip 首先侦壳,用PeiD0.94打开,发现显示为Microsoft Visual C++ 6.0,基本判断为无壳 00401058 /75 74 jnz short ncrackme.004010CE 这个应该是计算的位置,在这里设断,输入用户名ssfighter,密码abcd1234。跟进去看看 00401069 |85C0 test eax,eax ; 比较 跟进call之后来到这里: 又有一个call,跟进之后发现是如下程序段: 看来是把刚才计算的结果写到了4050AC内存中,记住这个地方,后面的计算都是在反复读取这里。 继续运行: 这时发现堆栈中写入了15个奇怪的大写字母: 可是这并不是注册码,继续看下面的程序: 004012F3 99 cdq ; edx置零 后面的程序基本就在比较了,看到了0040132E的retn,知道这里就返回了,由于刚才我们看到主程序中是test eax, eax就是要eax=0的时候注册成功,我们又看到00401327 mov eax, ebx。呵呵,原来eax就是ebx啊,前面对ebx的操作只有ebx置零和ebx累加,由此我们知道必须在00401311行的地方eax=edx才能保证ebx=ebx+0,再往前看,看到这里: 004012FF 0FBE4C34 2C movsx ecx,byte ptr ss:[esp+esi+2C] ; 取填入的注册码 ecx的值就是我们填入的注册码,而只要让40130A时eax=ecx,后面就能保证这位计算正确,因此在这里设断,记下每次的eax,串成字符串就是所要的注册码,至于注册码的位数,看这里 0040131D F2:AE repne scas byte ptr es:[edi] 前面是取用户名的位数,后面比较,因此可以知道注册码的位数应该和用户名的位数一样。 在40130A设断点后得到的一组eax值为: 注册通过,后面主要参考了riijj大侠的贴子,受他贴子启发才明白了好多地方。程序基本都看懂了,改天写个注册机出来。 By wynney **************************************************************************************** http://bbs.chinadev.net By wynney 大家好,我是wynney,回想了一下我前面做的十五课,里面只是提了一下,没有真正介绍“最后一次异常法”。今天就给大家做个动画,希望能够起到抛砖引玉的作用。先给大家介绍一点“理论知识”吧,里面有许多观点引用了二哥的说法。 **************************************************************************************** 如何分辨加密壳和压缩壳,通用特点,Od载入时有入口警告或询问是压缩程序吗?普通压缩壳Od调试时候没有异常,加密壳全部有反跟踪代码,会有许多SEH陷阱使OD调试时产生异常。 pushfd 跟踪时如果有发现 popad 对应 pushad 和 popad 相对应 retn 等指令,发生跨断跳跃一般就到了OEP处。 找Oep时注意两点。 这里我说说关于F8(Step Over)和F7(Step in)的一般方法,粗跟的时候一般都是常用F8走,但是有些call是变形的Jmp,此时就需要F7代过,区别是否是变形Jmp的一个简单方法是比较 call的目标地址和当前地址,如果两者离的很近,一般就是变形Jmp了,用F7走。对于Call的距离很远,可以放心用F8步过,如果你再用F7步过,只是浪费时间而已。F8步过对压缩壳用的很多,F7步过加密壳用的很多,如果用F8一不小心就跑飞(程序运行),跟踪失败。 加密壳找Oep **************************************************************************************** 用女孩子日记本在写日记,但是日记本有密码,想看…..但是看人家日记本素不厚道的做法,但是自己很想试试破解一下这个东东,后来发现其实破解这个小东东还是挺简单的,虽然软件声称“数据双重加密, 就算数据库被解了密码也无法看出日记正文,因为正文内容也用用户的密钥加密了,而且没有密码绝对还原不出原内容.” 其实,这个程序只是在数据方面加密,但是主程序问题多多,就像那个水桶原理一样,通过主程序可以很容易破解掉密码,因此纵是数据有n层加密也没用。 从网上下载了这个小程序(http://www2.skycn.com/soft/16886.html),界面还是很pp的,先赞一个。将默认密码girl改为candyfloss03。 首先用最菜鸟最菜鸟的方法,直接搜索内存。在执行diary.exe文件后,随便输入一个密码abccba,然后确定,弹出对话框“密码错误,请重新输入”,呵呵,当然密码不对了,用WinHex打开内存,搜索abccba,抬头往上看,看到什么了….“candyfloss03”几个字母赫然映入眼帘,呵呵,这就是真正的密码啊,想不到这个程序居然把输入的密码和真正的密码在内存中存储的这么近,sigh…. 然后再试试用 W32Dasm反编译diary.exe看看。先用PEid0.93查一下这个程序是否加壳了。可以看到是用UPX加的壳,用upxfix去壳,再用 PEid0.93看一下,没壳了,呵呵,用W32Dasm反编译看看。长时间的等待之后,终于反编译结束了,选择菜单上的参考-串式数据参考,找到“密码错误,请重新输入”这句话,来到程序段中。记下地址005674B8,往前翻翻,在00567482处看到了命令jne 005674B8,呵呵,这就是关键跳,打开Ultraedit,搜索75348BC3,把75改为74(就是把jne改成je),存盘退出,再运行 diary.exe试试,随便输入一个密码,呵呵,这就进去了吧。 不过我还是大菜鸟大菜鸟,还只能搞搞这样的小玩意儿,还在努力学习中,写点东西纪念一下,嘻嘻。 不知道为什么自己突然会对破解技术感兴趣,虽然早已经习惯了在网上找注册机,找注册码,但是自己渴望的是做一个能够自己破解软件的人,上了Crack版,发现版面很萧条,而且大部分来版上的人都是来求注册机的,可怜现在的版主也不怎么管,看了以前的帖子,有点怀念过去的版主,虽然那时候我还茫然不知破解为何物。破解应该是一种技术,正如老版主所说的,这是一个技术性的版面,但是现在已经很难见到那种纯粹技术性的文章了,有点遗憾…. 不过自己是很喜欢破解这门技术的,我喜欢一个人静静地坐在电脑前面看着汇编语言一条条的执行,盯着EAX、EBX寄存器值的变化,正如每一个破解入门的教材中所讲的那样,破解永远都是违法的,我知道,对于我来说,破解只是为了一种追求自我超越的过程,是一门手艺。 呵呵,现在水平还很烂,慢慢加油~~ |
|
||