小菜鸟一枚 发表于 2020-7-20 08:19

学破解第121天,《160个CrackerMe之004》学习

## 学破解第121天,《160个CrackerMe之004》学习
前言:
  从小学到大专(计算机网络技术专业),玩过去的,所以学习成绩惨不忍睹,什么证书也没考,直到找不到工作才后悔,不知道怎么办才好。

  2017年12月16日,通过19元注册码注册论坛账号,开始做伸手党,潜水一年多,上来就是找软件。(拿论坛高大上的软件出去装X)

  2018年8月某一天,报名了华中科技大学网络教育本科(计算机科学与技术专业)2018级秋季。(开始提升学历)

  2019年6月17日,不愿再做小菜鸟一枚,开始零基础学习破解。(感谢小糊涂虫大哥在我刚开始学习脱壳时,录制视频解答我的问题)

  2020年7月7日,感谢H大对我的鼓励,拥有了第一篇获得优秀的文章。(接下来希望学习逆向,逆天改命)

  坛友们,年轻就是资本,和我一起逆天改命吧,我的学习过程全部记录及学习资源:(https://www.52pojie.cn/thread-1208234-1-1.html)
立帖为证!--------记录学习的点点滴滴

### 0x1分析题目
  1.打开软件,就是用户名和注册码的提示


  2.没有注册按钮,想想论坛春节红包第二题,估计是一样的套路,要求是下面显示图片就是破解成功

### 0x2寻找爆破点
  1.Delphi程序啊,两个获取文本框输入的API也不能用,Delphi反编译工具也不会用,不管了,吾爱OD在手,在windows上跑的程序,不信还能上天

  2.搜字符串,看到了注册成功字样,然后输入用户名和密码,我在哪点确定呢???

  3.找不到从哪跳转到注册成功这里的啊,凉凉,爆破都不给机会的吗?

  4.我不信windows上跑的程序不吃消息断点,挂上消息断点,全部消息,还真断不下来,算你狠!!!

  5.再看看这个窗口视图,为啥断不下来呢?


  6.那我就从窗口产生开始下断点吧,找到最顶层的父窗口句柄004204A8 直接F2或者硬件断点,强行断下来从这里开始分析。

  7.分析了一大圈,不行了,去找个反编译工具IDR学一学,2小时后,我又回来了,看看下面的截图


  8.看看这些事件,单机,双击,keyup,还有chkcode,最终发现文本框的输入改变或会触发chkcode事件,Ctrl+G转到00457C40这里看看
```
00457C1C   .53 75 6E 20 4>ascii "Sun Bird",0
00457C25      00            db 00
00457C26      00            db 00
00457C27      00            db 00
00457C28   .FFFFFFFF      dd FFFFFFFF
00457C2C   .0F000000      dd 0000000F
00457C30   .64 73 65 6C 6>ascii "dseloffc-012-OK",0
00457C40/.55            push ebp
00457C41|.8BEC          mov ebp,esp
00457C43|.51            push ecx
00457C44|.B9 05000000   mov ecx,0x5
00457C49|>6A 00         /push 0x0
00457C4B|.6A 00         |push 0x0
00457C4D|.49            |dec ecx
00457C4E|.^ 75 F9         \jnz short CKme.00457C49
```

  9.继续单步跟踪,基本上就能得到我要的信息了
```
00457C6F|.FFB3 10030000 push dword ptr ds:            ;黑头Sun Bird
00457C75|.8D55 F8       lea edx,
00457C78|.8BC6          mov eax,esi
00457C7A|.E8 85FEFAFF   call CKme.00407B04
00457C7F|.FF75 F8       push                            ;取出了7,输入的用户名长度就是7
00457C82|.FFB3 14030000 push dword ptr ds:            ;dseloffc-012-OK
00457C88|.8D55 F4       lea edx,
00457C8B|.8B83 D4020000 mov eax,dword ptr ds:
00457C91|.E8 B2B6FCFF   call CKme.00423348
00457C96|.FF75 F4       push                            ;52pojie
00457C99|.8D83 18030000 lea eax,dword ptr ds:
00457C9F|.BA 04000000   mov edx,0x4
00457CA4|.E8 93BFFAFF   call CKme.00403C3C
00457CA9|.33D2          xor edx,edx
00457CAB|.8B83 F4020000 mov eax,dword ptr ds:
00457CB1|.E8 AAB5FCFF   call CKme.00423260                     ;把固定字符串和我输入的52pojie拼起来
00457CB6|.8B93 18030000 mov edx,dword ptr ds:         ;黑头Sun Bird7dseloffc-012-OK52pojie
00457CBC|.8B83 F4020000 mov eax,dword ptr ds:
00457CC2|.E8 B1B6FCFF   call CKme.00423378
00457CC7|.33F6          xor esi,esi
00457CC9|>8D55 EC       /lea edx,
00457CCC|.8B83 D4020000 |mov eax,dword ptr ds:
00457CD2|.E8 71B6FCFF   |call CKme.00423348
00457CD7|.8B45 EC       |mov eax,                     ;52pojie
00457CDA|.E8 9DBEFAFF   |call CKme.00403B7C
00457CDF|.83C0 03       |add eax,0x3                           ;用户名长度+3=10
00457CE2|.8D55 F0       |lea edx,
00457CE5|.E8 1AFEFAFF   |call CKme.00407B04
00457CEA|.FF75 F0       |push
00457CED|.8D55 E8       |lea edx,
00457CF0|.8B83 D4020000 |mov eax,dword ptr ds:
00457CF6|.E8 4DB6FCFF   |call CKme.00423348
00457CFB|.FF75 E8       |push                         ;52pojie
00457CFE|.8D55 E4       |lea edx,
00457D01|.8BC6          |mov eax,esi
00457D03|.E8 FCFDFAFF   |call CKme.00407B04
00457D08|.FF75 E4       |push
00457D0B|.8D45 FC       |lea eax,
00457D0E|.BA 03000000   |mov edx,0x3                           ;edx = 3
00457D13|.E8 24BFFAFF   |call CKme.00403C3C
00457D18|.46            |inc esi                                 ;esi+1
00457D19|.83FE 13       |cmp esi,0x13                            ;循环到esi = 0x13,也就是19
00457D1C|.^ 75 AB         \jnz short CKme.00457CC9
00457D1E|.8D55 E0       lea edx,
00457D21|.8B83 D8020000 mov eax,dword ptr ds:
00457D27|.E8 1CB6FCFF   call CKme.00423348
00457D2C|.8B45 E0       mov eax,                        ;12345
00457D2F|.8B93 18030000 mov edx,dword ptr ds:         ;黑头Sun Bird7dseloffc-012-OK52pojie
```

### 0x3分析算法
  1.先来个黑盒测试
输入:
52pojie
52pojie1
52pojie12
52pojie123

输出:
黑头Sun Bird12dseloffc-012-OK52pojie
黑头Sun Bird13dseloffc-012-OK52pojie1
黑头Sun Bird14dseloffc-012-OK52pojie12
黑头Sun Bird15dseloffc-012-OK52pojie123

  2.结合上面的分析代码,可以猜出黑头Sun Bird + 用户名长度 + 5 + dseloffc-012-OK + 用户名就是密码。

  3.但是鼠标单击之后,图片还是不显示?最后参考其他大佬的文章,看到了要先双击,然后单击才能显示图片。

  4.如果只是爆破的话,只需要把这个关键跳nop掉(右键搜索注册成功字样就能看到),然后单击就能直接显示图片了。
```
00458031|.81BE 0C030000>cmp dword ptr ds:,0x85
0045803B|.75 76         jnz short CKme.004580B3
```

### 0x4注册机的编写
  1.算法部分:
黑头Sun Bird + 用户名长度 + 5 + dseloffc-012-OK + 用户名得到注册码

  2.代码实现:
```
package cpyutil.xiao.cai.niao.com;

import java.util.Scanner;

public class Register {
        public static void main(String[] args) {

                String name;
                int code;
                String serial;

                System.out.println("请输入name(不小于4个字符):");
                Scanner sc = new Scanner(System.in);// 初始化一个输入流

                name = sc.nextLine();// 从控制台读取输入的字符串

                if (name == null || name.length() < 4)// 如果输入的长度小于4退出程序
                        System.exit(0);

                sc.close();// 关闭输入流
               
                code = name.length() * 0x15B38;//将字符串的长度乘以0x15B38
                code += name.charAt(0);//加上第一个字符
                code += 2;//加2
                code *= 3;//乘3
                code -= 2;//减2
                code -= -15;//减-15

                // 将数值转换成字符串
                serial = String.valueOf(code);
               
                // 输出正确的serial
                System.out.println("生成的serial:");
                System.out.println(serial);
        }
}
```
输出结果:
请输入用户名:
52pojie12
注册码:
黑头Sun Bird14dseloffc-012-OK52pojie12

&emsp;&emsp;3.验证注册机的效果,输入52pojie12和黑头Sun Bird14dseloffc-012-OK52pojie12,成功显示照片。

### 0x5总结
&emsp;&emsp;1.这个出照片的过程我是真的猜不到,要先点击两次再单击一次

&emsp;&emsp;2.注册码的算法和前面差不多,并不难,就是用户名好像只能是数字开头一样。

&emsp;&emsp;3.通过IDR找出的事件地址再去下断点果然好多了。

&emsp;&emsp;**PS:善于总结,善于发现,找到分析问题的思路和解决问题的办法。虽然我现在还是零基础的小菜鸟一枚,也许学习逆向逆天改命我会失败,但也有着成功的可能,只要还有希望,就决不放弃!**

466462323 发表于 2020-7-20 14:24

jzm713 发表于 2020-7-20 08:28

看看,学习一下。。

绝版王子丶亲 发表于 2020-7-20 08:30

楼主,学破解,零基础应该从那开始学期

arialyy 发表于 2020-7-20 08:32

学习一下

阿根达斯 发表于 2020-7-20 08:37

真的以前不懂

xy0225 发表于 2020-7-20 08:40

谢谢分享

wapjcxz 发表于 2020-7-20 08:40

小白默默了解学习

DemoCc10 发表于 2020-7-20 08:43

收藏先,谢谢大佬!

wgz001 发表于 2020-7-20 08:46

好好保护头发吧,太难了

lj3572996 发表于 2020-7-20 08:48

学习了,谢谢楼主
页: [1] 2 3 4 5 6 7
查看完整版本: 学破解第121天,《160个CrackerMe之004》学习