• 逆向破解之160个CrackMe —— 004-005


    CrackMe —— 004

    160 CrackMe 是比较适合新手学习逆向破解的CrackMe的一个集合一共160个待逆向破解的程序

    CrackMe:它们都是一些公开给别人尝试破解的小程序,制作 crackme 的人可能是程序员,想测试一下自己的软件保护技术,也可能是一位 cracker,想挑战一下其它 cracker 的破解实力,也可能是一些正在学习破解的人,自己编一些小程序给自己破。

    CrackMe简称CM。
    程序下载地址:点击我

    来源 <-点击查看

    编号 作者 保护方式
    004 ajj Name/Serial(Delphi)
    005 ajj Serial(Delphi)

    工具 

    x32dbg

    DelphiDecompiler

    peid

    LordPE

    ImportREC

    开始破解之旅

    ON.1

    使用x32dbg打开004号程序,和程序一起的还有一个帮助文件,从文件中我们得知程序是Delphi

    打开程序,我们发现没有一个确认按钮,这下应该怎么来操作呢?

    先搜索字符串

    地址=004580A9
    反汇编=mov edx,ckme.458114
    字符串="恭喜恭喜!注册成功"
    

     双击,在这个地址向上翻看

    第二个跳转跳过了注册成功,该跳转为注册码判断跳转将其NOP,输入框被输入数据????怎么没有任何反应

    我们使用DelphiDecompiler 来打开004号程序,该程序是一个Delphi反编译程序,点击Procedures,在Events窗口下发现单击,双击事件和一个chkcode,chkcode汉意疑似检测code

    回到程序,我们单击bingo~,结果出现了,美丽的朱茵小姐出现了

    接下来我们使用追码的方式来尝试破解

    记录两个地址 00457E7C ,00457FB800457C40 在x32dbg 中设置断点,来到程序在输入框内输入数据,单击

    停在了断点处

    单步向下开始走

    到达00457C88处时出现dseloffc-012-OK 疑似注册码,继续单步向下

    00457C50 | 51                       | push ecx                                |
    00457C51 | 874D FC                  | xchg dword ptr ss:[ebp-4],ecx           |
    00457C54 | 53                       | push ebx                                | ebx:"紋E"
    00457C55 | 56                       | push esi                                |
    00457C56 | 8BD8                     | mov ebx,eax                             | ebx:"紋E", eax:&"10""
    00457C58 | 33C0                     | xor eax,eax                             | eax:&"10"
    00457C5A | 55                       | push ebp                                |
    00457C5B | 68 3D7E4500              | push ckme.457E3D                        |
    00457C60 | 64:FF30                  | push dword ptr fs:[eax]                 |
    00457C63 | 64:8920                  | mov dword ptr fs:[eax],esp              |
    00457C66 | 8BB3 F8020000            | mov esi,dword ptr ds:[ebx+2F8]          |
    00457C6C | 83C6 05                  | add esi,5                               |
    00457C6F | FFB3 10030000            | push dword ptr ds:[ebx+310]             | [ebx+310]:"黑头Sun Bird"
    00457C75 | 8D55 F8                  | lea edx,dword ptr ss:[ebp-8]            | [ebp-8]:"10"
    00457C78 | 8BC6                     | mov eax,esi                             | eax:&"10"
    00457C7A | E8 85FEFAFF              | call ckme.407B04                        |
    00457C7F | FF75 F8                  | push dword ptr ss:[ebp-8]               | [ebp-8]:"10"
    00457C82 | FFB3 14030000            | push dword ptr ds:[ebx+314]             | [ebx+314]:"dseloffc-012-OK"    疑似注册码
    00457C88 | 8D55 F4                  | lea edx,dword ptr ss:[ebp-C]            |
    00457C8B | 8B83 D4020000            | mov eax,dword ptr ds:[ebx+2D4]          | eax:&"10", [ebx+2D4]:"聪A"
    00457C91 | E8 B2B6FCFF              | call ckme.423348                        |
    00457C96 | FF75 F4                  | push dword ptr ss:[ebp-C]               |
    00457C99 | 8D83 18030000            | lea eax,dword ptr ds:[ebx+318]          | eax:&"10", [ebx+318]:"黑头Sun Bird10dseloffc-012-OK12345"
    00457C9F | BA 04000000              | mov edx,4                               |
    00457CA4 | E8 93BFFAFF              | call ckme.403C3C                        |
    00457CA9 | 33D2                     | xor edx,edx                             |
    00457CAB | 8B83 F4020000            | mov eax,dword ptr ds:[ebx+2F4]          | eax:&"10", [ebx+2F4]:&"HPB"
    00457CB1 | E8 AAB5FCFF              | call ckme.423260                        |
    00457CB6 | 8B93 18030000            | mov edx,dword ptr ds:[ebx+318]          | [ebx+318]:"黑头Sun Bird10dseloffc-012-OK12345"
    00457CBC | 8B83 F4020000            | mov eax,dword ptr ds:[ebx+2F4]          | eax:&"10", [ebx+2F4]:&"HPB"
    00457CC2 | E8 B1B6FCFF              | call ckme.423378                        |
    00457CC7 | 33F6                     | xor esi,esi                             |
    00457CC9 | 8D55 EC                  | lea edx,dword ptr ss:[ebp-14]           |
    

    继续单步向下发现00457CBC[ebx+318]堆栈处出现一串更长的字符串,疑似注册码也在里面,难道这个才是真正的注册码吗,记录下来

    在注册码内输入“黑头Sun Bird10dseloffc-012-OK12345”双击窗口,图片显示成功

    我们换个账号765 发现注册码变了“黑头Sun Bird8dseloffc-012-OK765” 中间10变为了8 ,最后12345变为了765,观察发现最后应该是账号

    中间应该是计算所得

    发现8在00457C7F压入栈内

    00457C7F | FF75 F8                  | push dword ptr ss:[ebp-8]               | [ebp-8]:L"8"
    

     向上翻看,发现00457C44和00457C4E为计算8的方式

    00457C44 | B9 05000000              | mov ecx,5                               |
    00457C49 | 6A 00                    | push 0                                  |
    00457C4B | 6A 00                    | push 0                                  |
    00457C4D | 49                       | dec ecx                                 |
    00457C4E | 75 F9                    | jne ckme.457C49                         |
    

     固定变量5,5+用户名长度

    注册码计算方式为“黑头Sun Bird”+用户名长度+“dseloffc-012-OK”+用户名

    CrackMe —— 005

    NO.1

    PEID查壳,发现存在UPX

    我们脱壳,在程序入口处停下来,单步一次,发现寄存器窗口ESP变为红色

    ESP处右键内存窗口转到,在该位置下硬件断点,F9运行

    此时停在了我们的OEP

    0044768C    55              push ebp
    0044768D    8BEC            mov ebp,esp
    0044768F    83C4 F4         add esp,-0xC
    00447692    B8 2C754400     mov eax,CKme002.0044752C                 ; UNICODE "+"
    00447697    E8 20EAFBFF     call CKme002.004060BC
    0044769C    A1 D88C4400     mov eax,dword ptr ds:[0x448CD8]
    004476A1    8B00            mov eax,dword ptr ds:[eax]
    004476A3    E8 64A4FFFF     call CKme002.00441B0C
    

     打开LordPE

    找到我们的进程,右键修复镜像大小,再次右键完整转存

    接下来使用ImportRec修复IAT

    输入OEP地址4768C 查找IAT,获取输入表,点击无效函数,在无效函数处删除指针->转储到文件

    提示:此处不要选择剪切指针,否则会程序会异常

    脱壳成功

    ON.2

    搜索字符串发现“注册了”字符串,进入地址向上翻看发现多个跳转 

    发现跳转全部跳过注册成功,将其全部NOP

    运行,发现界面发生变化,破解成功

    通过查看字符串发现一个疑似文件地址,跳转到汇编处发现会读取X盘内ok.txt文件

    地址=00446D49
    反汇编=mov edx,dumped_.446DEC
    字符串="X:\ajj.126.c0m\j\o\j\o\ok.txt"
    

     在X盘内,博主只有一个C盘,感觉到了无穷的麻烦....这部分交给正在观看本文章的你啦(^_^)

  • 相关阅读:
    Linux内核中的信号机制--一个简单的例子【转】
    国际C语言混乱代码大赛代码赏析(一)【转】
    宏内核与微内核【转】
    Linux内核USB驱动【转】
    USB驱动开发大全【转】
    Linux驱动程序学习【转】
    GPIO口及中断API函数【转】
    Linux的fasync驱动异步通知详解【转】
    request_irq() | 注册中断服务函数【转】
    混杂设备动态次设备号分析【转】
  • 原文地址:https://www.cnblogs.com/lonenysky/p/11333445.html
Copyright © 2020-2023  润新知