吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 5416|回复: 59
收起左侧

[原创] 学破解第121天,《160个CrackerMe之004》学习

  [复制链接]
小菜鸟一枚 发表于 2020-7-20 08:19

学破解第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.打开软件,就是用户名和注册码的提示
1.png

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

0x2寻找爆破点

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

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

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

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

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

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

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

  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:[ebx+0x310]            ;  黑头Sun Bird
00457C75  |.  8D55 F8       lea edx,[local.2]
00457C78  |.  8BC6          mov eax,esi
00457C7A  |.  E8 85FEFAFF   call CKme.00407B04
00457C7F  |.  FF75 F8       push [local.2]                           ;  取出了7,输入的用户名长度就是7
00457C82  |.  FFB3 14030000 push dword ptr ds:[ebx+0x314]            ;  dseloffc-012-OK
00457C88  |.  8D55 F4       lea edx,[local.3]
00457C8B  |.  8B83 D4020000 mov eax,dword ptr ds:[ebx+0x2D4]
00457C91  |.  E8 B2B6FCFF   call CKme.00423348
00457C96  |.  FF75 F4       push [local.3]                           ;  52pojie
00457C99  |.  8D83 18030000 lea eax,dword ptr ds:[ebx+0x318]
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:[ebx+0x2F4]
00457CB1  |.  E8 AAB5FCFF   call CKme.00423260                       ;  把固定字符串和我输入的52pojie拼起来
00457CB6  |.  8B93 18030000 mov edx,dword ptr ds:[ebx+0x318]         ;  黑头Sun Bird7dseloffc-012-OK52pojie
00457CBC  |.  8B83 F4020000 mov eax,dword ptr ds:[ebx+0x2F4]
00457CC2  |.  E8 B1B6FCFF   call CKme.00423378
00457CC7  |.  33F6          xor esi,esi
00457CC9  |>  8D55 EC       /lea edx,[local.5]
00457CCC  |.  8B83 D4020000 |mov eax,dword ptr ds:[ebx+0x2D4]
00457CD2  |.  E8 71B6FCFF   |call CKme.00423348
00457CD7  |.  8B45 EC       |mov eax,[local.5]                       ;  52pojie
00457CDA  |.  E8 9DBEFAFF   |call CKme.00403B7C
00457CDF  |.  83C0 03       |add eax,0x3                             ;  用户名长度+3=10
00457CE2  |.  8D55 F0       |lea edx,[local.4]
00457CE5  |.  E8 1AFEFAFF   |call CKme.00407B04
00457CEA  |.  FF75 F0       |push [local.4]
00457CED  |.  8D55 E8       |lea edx,[local.6]
00457CF0  |.  8B83 D4020000 |mov eax,dword ptr ds:[ebx+0x2D4]
00457CF6  |.  E8 4DB6FCFF   |call CKme.00423348
00457CFB  |.  FF75 E8       |push [local.6]                          ;  52pojie
00457CFE  |.  8D55 E4       |lea edx,[local.7]
00457D01  |.  8BC6          |mov eax,esi
00457D03  |.  E8 FCFDFAFF   |call CKme.00407B04
00457D08  |.  FF75 E4       |push [local.7]
00457D0B  |.  8D45 FC       |lea eax,[local.1]
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,[local.8]
00457D21  |.  8B83 D8020000 mov eax,dword ptr ds:[ebx+0x2D8]
00457D27  |.  E8 1CB6FCFF   call CKme.00423348
00457D2C  |.  8B45 E0       mov eax,[local.8]                        ;  12345
00457D2F  |.  8B93 18030000 mov edx,dword ptr ds:[ebx+0x318]         ;  黑头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:[esi+0x30C],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

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

0x5总结

  1.这个出照片的过程我是真的猜不到,要先点击两次再单击一次

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

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

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

免费评分

参与人数 16吾爱币 +19 热心值 +12 收起 理由
break; + 1 加油
TimothyZKX + 1 谢谢@Thanks!
linlang70 + 1 + 1 我很赞同!
万里绿枫叶 + 1 + 1 用心讨论,共获提升!
az75 + 1 我很赞同!
menmenmen + 1 我很赞同!
Miracle1666 + 1 很牛
pj8726413 + 1 + 1 我很赞同!
bullshit + 1 + 1 我很赞同!
Hmily + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
hj170520 + 1 + 1 用心讨论,共获提升!
tony666 + 1 + 1 我很赞同!
qq398532104 + 1 我很赞同!
MmxHand + 1 + 1 我很赞同!
jzm713 + 1 我很赞同!
461735945 + 1 + 1 我很赞同!

查看全部评分

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

头像被屏蔽
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
学习了,谢谢楼主
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-15 17:32

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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