欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

[原创]一个简单的逆向+注册机源码

[原创]一个简单的逆向+注册机源码

来发个小帖子怡怡情............
准备工具:od  vs 
-------------------------------------
我们先查是否有壳,再运行写主程序,(由于并没有壳,所以不演示这个步骤了)
点开主程序发现有个按钮是灰色的

那么我们必须先把这个解决。在脑海(也可以百度)中搜索下什么可以将按钮置为无效 那么便是“EnableWindow”
我们将它拖入OD 往下一拉 很容发现:

我们简单粗暴的将它NOP掉 并转存为“Crack1.exe”
再打开程序查看是否运行正常(显然可以的):

 我们随便输入账户名以及序列号:


例:

NAME:1111

SERIAL:111111


点击  check it。会提示:

然后我们可以将字符串记录下来再去OD搜索 (然而在这里并没有什么X用,我并不打算用这个方法)。

然后我们把新转存的程序拖入OD  往下一拉 发现3个CALL 

根据函数名可知:获取对话框中的控件相关的标题或文本

  • 紧跟其后的call有什么作用呢?

  • 我也不知道 我们选中-回车进去瞧瞧  很容易能发现

    好 那么在这个函数CALL下个断点(或者函数内第一个PUSH)  我们F9运行  成功断下

    
    00401168    50              push eax
    
    00401169    53              push ebx
    
    0040116A    57              push edi
    
    0040116B    0FBE0C38        movsx ecx,byte ptr ds:[eax+edi]
    
    0040116F    51              push ecx
    
    00401170    68 59304000     push Crack1.00403059                     ; %x
    
    00401175    68 68314000     push Crack1.00403168                     ; ASCII "31"
    
    0040117A    E8 D3000000     call <jmp.&user32.wsprintfA>             ; 将字符转换为16进制
    
    0040117F    83C4 0C         add esp,0xC
    
    00401182    68 68314000     push Crack1.00403168                     ; ASCII "31"
    
    00401187    68 68324000     push Crack1.00403268                     ; ASCII "313131"
    
    0040118C    E8 0F010000     call <jmp.&kernel32.lstrcatA>            ; 将转换后的十六进制字符衔接
    
    00401191    5F              pop edi
    
    00401192    5B              pop ebx
    
    00401193    58              pop eax
    
    00401194    40              inc eax
    
    00401195    3BC3            cmp eax,ebx                              ; 根据字符长短判断下步操作
    
    00401197  ^ 7C CF           jl short Crack1.00401168
    
    

    紧跟其后的是
    
    00401199    68 68334000     push Crack1.00403368                     ; ASCII 1111111"
    
    0040119E    68 68324000     push Crack1.00403268                     ; ASCII 1313131"(此处我未单步完)
    
    004011A3    E8 FE000000     call <jmp.&kernel32.lstrcmpA>            ; 字符串比较
    
    004011A8    0BC0            or eax,eax
    
    004011AA    75 4A           jnz short Crack1.004011F6
    
    

    那我看到“1”和“31”瞬间联想到这是十进制-》十六进制 
    那么我们运行下程序试试这个想法。


    成功!
    好 根据思路写(搜)个注册机:
    
      char ch[1024];
    
      char hex[1024];
    
      char result[1024];
    
      char *p_ch = ch;
    
      char *p_hex = hex;
    
      printf("请输入你的账户名:");
    
      scanf_s("%s",p_ch,_countof(ch));       
    
      strToHex(p_ch,p_hex);//将指定字符串转换为16进制
    
      printf("序列号为:%s\n",p_hex);
    
      system("pause");
    
      return 0;
    
    

    随便输入个名字 得到

     
    我们将它拿去试试, 却发现 

    那究竟是怎么回事呢 我们拖入OD继续走俩步试试

    擦 原来 转换为小写了
    好 那么只要在原来代码上加上
    
           char *copy1;//序列号
    
      _strlwr_s(copy1=_strdup(p_hex),strlen(p_hex) + 1);
    
      printf("序列号为:%s\n",copy1);
    
    

    至此 完。
    ------------------
    源码及附件
    注册机.rar
    Crack.rar

    上传的附件 4.png
    6.png
    7.png
    8.png
    9.png
    10.png
    11.png
    12.png
    13.png
    1.png
    2.png
    3.png
    5.png
    注册机.rar
    Crack.rar

    注意:上传附件及图片大小不得大于30M。

    ⚠️ 版权声明:
    本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途
    未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

    0 0 0 举报
    复制成功