160个CrackMe 028 Cosh.2

首先PEID查壳:

没有壳,位码验证:

发现了错误字符串,于是OD中查找参考文本字符串进行跟进:

在OD中找到相应的分支结构:

在上面的函数头部下断点,单步键入,分析代码:简单,略过,最后发现实际没有算法,就是serial硬编码,把十六进制转换成ASCII码即可。

004014CA   .  56            push esi
004014CB   .  8BF1          mov esi,ecx
004014CD   .  57            push edi
004014CE   .  8DBE A0000000 lea edi,dword ptr ds:[esi+0xA0]
004014D4   .  8BCF          mov ecx,edi
004014D6   .  E8 6F030000   call <jmp.&MFC42.#3876>
004014DB   .  8B1D FC214000 mov ebx,dword ptr ds:[<&USER32.PostQuitMessage>]    ;  user32.PostQuitMessage
004014E1   .  83F8 05       cmp eax,0x5                                         ;  ;获取name字符串的长度,判断是否大于5
004014E4   .  7E 50         jle short CoSH_2.00401536                           ;  ;字符串长度小于等于5,错误
004014E6   .  8D6E 60       lea ebp,dword ptr ds:[esi+0x60]
004014E9   .  8BCD          mov ecx,ebp
004014EB   .  E8 5A030000   call <jmp.&MFC42.#3876>                             ;  ;获取serial字符串的长度
004014F0   .  83F8 05       cmp eax,0x5                                         ;  ;判断是否大于5
004014F3   .  7E 41         jle short CoSH_2.00401536                           ;  ;字符串长度小于等于5,错误
004014F5   .  8D86 E0000000 lea eax,dword ptr ds:[esi+0xE0]
004014FB   .  8BCF          mov ecx,edi
004014FD   .  50            push eax
004014FE   .  E8 41030000   call <jmp.&MFC42.#3874>
00401503   .  8DBE E4000000 lea edi,dword ptr ds:[esi+0xE4]
00401509   .  8BCD          mov ecx,ebp
0040150B   .  57            push edi
0040150C   .  E8 33030000   call <jmp.&MFC42.#3874>
00401511   .  8B07          mov eax,dword ptr ds:[edi]
00401513   .  8038 36       cmp byte ptr ds:[eax],0x36                          ;  ;serila的第一个与0x36比较
00401516   .  75 1E         jnz short CoSH_2.00401536
00401518   .  8078 01 32    cmp byte ptr ds:[eax+0x1],0x32                      ;  ;serila的第二个字符与0x32比较
0040151C   .  75 18         jnz short CoSH_2.00401536
0040151E   .  8078 02 38    cmp byte ptr ds:[eax+0x2],0x38                      ;  ;serila的第三个字符与0x38比较
00401522   .  75 12         jnz short CoSH_2.00401536
00401524   .  8078 03 37    cmp byte ptr ds:[eax+0x3],0x37                      ;  ;serila的第四个字符与0x37比较
00401528   .  75 0C         jnz short CoSH_2.00401536
0040152A   .  8078 04 2D    cmp byte ptr ds:[eax+0x4],0x2D                      ;  ;serila的第五个字符与0x2D比较
0040152E   .  75 06         jnz short CoSH_2.00401536
00401530   .  8078 05 41    cmp byte ptr ds:[eax+0x5],0x41                      ;  ;serila的第六个字符与0x41比较
00401534   .  74 17         je short CoSH_2.0040154D
00401536   >  6A 00         push 0x0
00401538   .  68 64304000   push CoSH_2.00403064                                ;  ASCII "ERROR"
0040153D   .  68 38304000   push CoSH_2.00403038                                ;  ASCII "One of the Details you entered was wrong"
00401542   .  8BCE          mov ecx,esi
00401544   .  E8 F5020000   call <jmp.&MFC42.#4224>
00401549   .  6A 00         push 0x0
0040154B   .  FFD3          call ebx                                            ;  user32.PostQuitMessage
0040154D   >  8D8E E0000000 lea ecx,dword ptr ds:[esi+0xE0]
00401553   .  8D5424 14     lea edx,dword ptr ss:[esp+0x14]
00401557   .  51            push ecx
00401558   .  68 2C304000   push CoSH_2.0040302C                                ;  ASCII "Well done,"
0040155D   .  52            push edx
0040155E   .  E8 D5020000   call <jmp.&MFC42.#926>

检验一下serial:

6287-A

最后,根据程序的流程写注册机

C++:

#include <iostream>
#include <cstring>
using namespace std;

#define N 100
int main()
{
    char name[N];
    char serial_true[N]={0x36,0x32,0x38,0x37,0x2D,0x41};
    char serial_false[N];
    cout<<"Please input your name:"<<endl;
    cin>>name;
    cout<<"Please input your serial:"<<endl;
    cin>>serial_false;
    if(strlen(name)<=5||strlen(serial_false)<=5)
    {
        cout<<"Error!"<<endl;
        return 0;
    }
    else
    {
        cout<<"True serial is only behind the string:"<<endl;
        for(int i=0;i<=6;i++)
        {
            cout<<serial_true[i];
        }
        cout<<endl;
    }
    return 0;
}

运行结果:

真是水题..

时间: 2024-11-15 05:28:56

160个CrackMe 028 Cosh.2的相关文章

160个CrackMe 029 Cosh.3

我们一起来看这个系列的第三题是不是水题.. PEID,没有查到有壳,依旧是一个C++的逆向: 伪码检验: 同样OD中查找文本字符串,定位到该字符串位置: 这三个题目都没有在定位上为难cracker. 于是还是同样的工作,向上找到函数的头部下断点,F9运行,之后,输入伪代码,F8进行代码分析: 这是这之后一部分的代码流程: 004014EC |. 8B4D E0 mov ecx,[local.8] 004014EF |. 81C1 A0000000 add ecx,0xA0 004014F5 |.

[反汇编练习] 160个CrackMe之028

[反汇编练习] 160个CrackMe之028. 本系列文章的目的是从一个没有任何经验的新手的角度(其实就是我自己),一步步尝试将160个CrackMe全部破解,如果可以,通过任何方式写出一个类似于注册机的东西. 其中,文章中按照如下逻辑编排(解决如下问题): 1.使用什么环境和工具 2.程序分析 3.思路分析和破解流程 4.注册机的探索 ---------------------------------- 提醒各位看客: 如果文章中的逻辑看不明白,那你一定是没有亲手操刀!OD中的跳转提示很强大

[反汇编练习] 160个CrackMe之029

[反汇编练习] 160个CrackMe之029. 本系列文章的目的是从一个没有任何经验的新手的角度(其实就是我自己),一步步尝试将160个CrackMe全部破解,如果可以,通过任何方式写出一个类似于注册机的东西. 其中,文章中按照如下逻辑编排(解决如下问题): 1.使用什么环境和工具 2.程序分析 3.思路分析和破解流程 4.注册机的探索 ---------------------------------- 提醒各位看客: 如果文章中的逻辑看不明白,那你一定是没有亲手操刀!OD中的跳转提示很强大

[反汇编练习] 160个CrackMe之020

[反汇编练习] 160个CrackMe之020. 本系列文章的目的是从一个没有任何经验的新手的角度(其实就是我自己),一步步尝试将160个CrackMe全部破解,如果可以,通过任何方式写出一个类似于注册机的东西. 其中,文章中按照如下逻辑编排(解决如下问题): 1.使用什么环境和工具 2.程序分析 3.思路分析和破解流程 4.注册机的探索 ---------------------------------- 提醒各位看客: 如果文章中的逻辑看不明白,那你一定是没有亲手操刀!OD中的跳转提示很强大

[反汇编练习]160个CrackMe之001

原地址:http://www.cnblogs.com/lopezycj/archive/2012/05/16/unity3d_tuchao.html Unity3D吐槽1--FBX导入 Unity3d用了也不久,也就几个月时间.插件很丰富,但有的是在很贵.编辑器写脚本还是不错,挺喜欢的,写好了,就能用,只是有些数据修改了脚本就无法保存了,场景内脚本控制的变量数据.如果要改脚本,就得先记录,后处理. 从3ds max导出带有动作的fbx文件,放进Unity3d里发生了如下的如下的错误: Impor

[反汇编练习] 160个CrackMe之024

[反汇编练习] 160个CrackMe之024. 本系列文章的目的是从一个没有任何经验的新手的角度(其实就是我自己),一步步尝试将160个CrackMe全部破解,如果可以,通过任何方式写出一个类似于注册机的东西. 其中,文章中按照如下逻辑编排(解决如下问题): 1.使用什么环境和工具 2.程序分析 3.思路分析和破解流程 4.注册机的探索 ---------------------------------- 提醒各位看客: 如果文章中的逻辑看不明白,那你一定是没有亲手操刀!OD中的跳转提示很强大

[反汇编练习] 160个CrackMe之023

[反汇编练习] 160个CrackMe之023. 本系列文章的目的是从一个没有任何经验的新手的角度(其实就是我自己),一步步尝试将160个CrackMe全部破解,如果可以,通过任何方式写出一个类似于注册机的东西. 其中,文章中按照如下逻辑编排(解决如下问题): 1.使用什么环境和工具 2.程序分析 3.思路分析和破解流程 4.注册机的探索 ---------------------------------- 提醒各位看客: 如果文章中的逻辑看不明白,那你一定是没有亲手操刀!OD中的跳转提示很强大

[反汇编练习] 160个CrackMe之021

[反汇编练习] 160个CrackMe之021. 本系列文章的目的是从一个没有任何经验的新手的角度(其实就是我自己),一步步尝试将160个CrackMe全部破解,如果可以,通过任何方式写出一个类似于注册机的东西. 其中,文章中按照如下逻辑编排(解决如下问题): 1.使用什么环境和工具 2.程序分析 3.思路分析和破解流程 4.注册机的探索 ---------------------------------- 提醒各位看客: 如果文章中的逻辑看不明白,那你一定是没有亲手操刀!OD中的跳转提示很强大

[反汇编练习] 160个CrackMe之015

[反汇编练习] 160个CrackMe之015. 本系列文章的目的是从一个没有任何经验的新手的角度(其实就是我自己),一步步尝试将160个CrackMe全部破解,如果可以,通过任何方式写出一个类似于注册机的东西. 其中,文章中按照如下逻辑编排(解决如下问题): 1.使用什么环境和工具 2.程序分析 3.思路分析和破解流程 4.注册机的探索 ---------------------------------- 提醒各位看客: 如果文章中的逻辑看不明白,那你一定是没有亲手操刀!OD中的跳转提示很强大