yingzi4f 发表于 2024-3-6 12:36

【反汇编练习】160个CrackME中的158 一字节爆破

【反汇编练习】160个CrackME 中的158

160个CrackMe的打包文件下载地址:
https://www.lanzoub.com/ipwFHha3bbcc52pj

看了158的破解链接:http://www.52pojie.cn/forum.php? ... 470028&pid=12114184 @反沉沦
发现写出了算法,但我用他的keygen 跑步来的code点了没反应.. 那我来个爆破的方法吧~

首先OD载入,查找字符串
发现REGISTERED可疑。 点开跟进去




进入该函数看了下,应该是一个弹窗


汇编不太行,直接载入IAD看伪代码吧.... 刚拿到IDAPRO8.3试试 效果,里面预装了CHATGPT插件,可以分析函数
IDA进入 00401509 地址


F5 反编译成C代码,


然后直接 GPT插件无脑翻译下看看..


// ---GPT_START---
// 预期目的:该函数的预期目的是更新totalSum的值,然后根据totalSum和dword_409784的比较结果来进行一系列操作。
//
// 参数的作用:参数hDlg是窗口的句柄,参数hInstance是模块的实例句柄。
//
// 详细功能:首先计算totalSum并判断其值是否超过0x7FFFFFFF,然后更新dword_409770的值为totalSum。接着如果dword_409784的值等于totalSum,则将字符串"aRegistered"写入到byte_409800中,并设置窗口的文本为该字符串。然后获取窗口中ID为1004的控件的句柄并启用该控件,接着调用DialogBoxParamA函数显示一个对话框,并禁用窗口中ID为1003的控件。
//
// 新的函数名字:updateRegistrationStatus
// ---GPT_END---
void __cdecl sub_4014E0(HWND hDlg, HINSTANCE hInstance)
{
int totalSum; // ecx
HWND regControl; // eax
HWND control; // eax

totalSum = dword_4097AC + dword_409770;
if ( (unsigned int)(dword_4097AC + dword_409770) > 0x7FFFFFFF )
    totalSum -= 0x7FFFFFFF;
dword_409770 = totalSum;
if ( dword_409784 == totalSum )
{
    wsprintfA(byte_409800, aRegistered);
    SetDlgItemTextA(hDlg, 1006, byte_409800);
    regControl = GetDlgItem(hDlg, 1004);
    EnableWindow(regControl, 1);
    DialogBoxParamA(hInstance, (LPCSTR)0x68, hDlg, DialogFunc, 0);
    control = GetDlgItem(hDlg, 1003);
    EnableWindow(control, 0);
}
}


改函数的功能:首先计算totalSum并判断其值是否超过0x7FFFFFFF,然后更新dword_409770的值为totalSum。接着如果dword_409784的值等于totalSum,则将字符串"aRegistered"写入到byte_409800中,并设置窗口的文本为该字符串。然后获取窗口中ID为1004的控件的句柄并启用该控件,接着调用DialogBoxParamA函数显示一个对话框,并禁用窗口中ID为1003的控件。

也就是说,key成功匹配后,点击确定就会弹窗出来。现在我们想办法跳转到这里就行!

直接看401509的汇编, 然后结合下上下文。
意思就是如果不相等 这个JNZ就会跳走。
我们直接nop掉就OK , 只需要改这里一下




点了确定之后, 之前的确定按钮会变灰, 功能没






ingIM 发表于 2024-3-7 20:01

此处注册状态是字符串常量,用IDA翻一下rdata,从调用往回看流程图的跳转能快很多
https://attach.52pojie.cn//forum/202403/07/161622f8cufordczof9bcf.png?l
无保护可以直接用IDA下断,有GPT分析直接断到伪代码上也许更方便
原贴那个keygen能用,但有些类型要手动补一下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
#include <tchar.h>

int _tmain(int argc, _TCHAR* argv[])
{
    char   szVolumeName = { 0 };
    char szName = { 0 };
    char szCompany = { 0 };
    char szSerial = { 0 };
    unsigned int nNameLength, nValue, nCompanyLength, i, m, n, k, nGroupValue, nTimeValue;
    char p[] = "?Etn5Pnc5AXi1DFlkYqnujsXNmvHdbcrqOoT8aaV5DkaymMRkPkoQ.";
    char q[] = "fQObVwNOankJ5skqJvae3Ae5jdoETu5n02J6Ez85430PNSDAPjDrYgFaze9VDRjq";
    char szMonth[] = ".9803D2F7404E";
    char szDay[] = ".F3A4BF3B0503FB8BCB4F49803D5C740";
    SYSTEMTIME st;

    GetLocalTime(&st);
    nTimeValue = szMonth;
    nTimeValue *= ((unsigned int)szDay);

    printf("请输入Name:");
    gets_s(szName, 32);
    nNameLength = (UINT32)strlen(szName);
    if (1 > (UINT32)nNameLength)
    {
      printf("\r\n输入Name的长度必须大于0\r\n");
      system("pause");
      return 0;
    }

    printf("请输入Group:");
    gets_s(szCompany, 32);
    nCompanyLength = (UINT32)strlen(szCompany);
    if (1 > (UINT32)nCompanyLength)
    {
      printf("\r\n输入group的长度必须大于0\r\n");
      system("pause");
      return 0;
    }
    nGroupValue = 0;
    for (i = 0; i < nCompanyLength - 1; i++)
    {
      k = szCompany;
      m = q;
      n = p;
      k *= m * n;
      k *= (i + 1);
      nGroupValue += k;
    }

    nValue = 0;
    for (i = 0; i < nNameLength - 1; i++)
    {
      k = (UINT8)szName;
      m = (UINT8)q;
      n = p;
      k *= m * n;
      k *= (i + 1);
      nValue += k;
    }

    nValue += nGroupValue + nTimeValue;


    if (nValue > 0x7FFFFFFF)
      nValue -= 0x7FFFFFFF;
    printf("%d\r\n", nValue);
    system("pause");
    return 0;
}

我不会逆算法只能下断拿key,什么时候能才能和大佬一样变成key的生产者_(:3」∠)_
想问楼主的GPT插件怎么开的,我也是在这个贴里面下的但是没有,外面搜到的插件是直接要token的

lvdousha123123 发表于 2024-3-8 17:08

yingzi4f 发表于 2024-3-6 13:25
https://www.lanzoub.com/ipwFHha3bbc 52pj

非常感谢 分开好看多了

co2qy 发表于 2024-3-6 15:00

谢谢,学到了

dewei_k 发表于 2024-3-6 19:25

yingzi4f 发表于 2024-3-6 13:25
https://www.lanzoub.com/ipwFHha3bbc 52pj

非常感谢

wengl123 发表于 2024-3-6 12:43

感谢大佬分享!

dewei_k 发表于 2024-3-6 13:16

文件分享取消了,麻烦重新分享一下,谢谢

yingzi4f 发表于 2024-3-6 13:25

dewei_k 发表于 2024-3-6 13:16
文件分享取消了,麻烦重新分享一下,谢谢

https://www.lanzoub.com/ipwFHha3bbc 52pj

zhoobt 发表于 2024-3-6 13:32

谢谢 有用的着{:1_893:}

不约儿童 发表于 2024-3-6 14:32

谢谢 有用的着

xiaobinwang 发表于 2024-3-6 16:13

谢谢有用

sototo 发表于 2024-3-7 00:16

非常有用!!感谢!!{:301_978:}
页: [1] 2 3
查看完整版本: 【反汇编练习】160个CrackME中的158 一字节爆破