小菜鸟一枚 发表于 2022-1-14 21:26

学破解第155天,《找一个简单的cm,增加一下信心》

前言:

  坛友们,年轻就是资本,和我一起逆天改命吧,我的学习过程全部记录及学习资源:(https://www.52pojie.cn/thread-1503734-1-1.html)
立帖为证!--------记录学习的点点滴滴

## 0x1发现目标

  1.小白第一个cm,新手快来找自信:https://www.52pojie.cn/thread-1571404-1-1.html

  2.对于没信心的小菜鸟来说,最喜欢这种新手难度的了,可以找回自信。

  3.题目描述:没有壳和花指令,非常适合新手成功会提示相关成功字样。

## 0x2开始破解
  1.IDA F5试试
```
int __stdcall sub_411760(HWND hDlg, int a2, int a3, int a4)
{
unsigned int l; //
unsigned int k; //
int j; //
unsigned int i; //
CHAR Text; // BYREF
int v10; //
char v11; //
char v12; //
CHAR String; // BYREF
int v14; //
char v15; //

__CheckForDebuggerJustMyCode(&unk_41C012);
*(_DWORD *)String = 0;
v14 = 0;
v15 = 0;
v12 = 105;
v12 = 96;
v12 = 110;
v12 = 114;
v12 = 105;
v12 = 116;
v12 = 96;
v12 = 104;
v12 = 1;
v11 = -76;
v11 = -58;
v11 = -61;
v11 = -67;
v11 = -53;
v11 = -90;
v11 = -79;
v11 = -35;
v11 = 1;
v10 = 1;
Text = -72;
Text = -90;
Text = -50;
Text = -77;
Text = -78;
Text = -56;
Text = -72;
Text = -89;
Text = 1;
if ( a2 == 16 )
{
    EndDialog(hDlg, 0);
}
else if ( a2 == 273 && a3 == 1002 )
{
    for ( i = 0; i < 9; ++i )
      v12 ^= 1u;
    GetDlgItemTextA(hDlg, 1001, String, 9);
    for ( j = 0; j < 9; ++j )
    {
      if ( String != v12 )
      {
      v10 = 0;
      break;
      }
      v10 = 1;
    }
    for ( k = 0; k < 9; ++k )
      Text ^= v10;
    if ( IsDebuggerPresent() )
      v10 = 0;
    if ( !v10 )
    {
      for ( l = 0; l < 9; ++l )
      Text = v11 ^ 1;
    }
    MessageBoxA(0, Text, "tip", 0);
}
return 0;
}
```

&emsp;&emsp;2.固定一下基址,因为动态基址跳来跳去不利于我们破解,所以点一下固定基址,把基址固定下来,再点保存。

!(https://s4.ax1x.com/2022/01/14/78N6PS.png)

&emsp;&emsp;3.OD下messagebox断点看看反汇编代码:
```
0041197B    6A 00         push 0x0
0041197D    68 307B4100   push cm.00417B30                                 ; tip
00411982    8D45 A4         lea eax,dword ptr ss:
00411985    50            push eax
00411986    6A 00         push 0x0
00411988    FF15 98B04100   call dword ptr ds:[<&USER32.MessageBoxA>]          ; user32.MessageBoxA
```

再看看堆栈窗口
```
0018F77C   0041198E/CALL 到 MessageBoxA 来自 cm.00411988
0018F780   00000000|hOwner = NULL
0018F784   0018F894|Text = "登录失败"
0018F788   00417B30|Title = "tip"
0018F78C   00000000\Style = MB_OK|MB_APPLMODAL


```

&emsp;&emsp;4.TEXT决定我们弹窗的内容,看看值从哪来?似乎有些晕。
```
Text = -72;
Text = -90;
Text = -50;
Text = -77;
Text = -78;
Text = -56;
Text = -72;
Text = -89;
Text = 1;
```
```
for ( k = 0; k < 9; ++k )
      Text ^= v10;
          
if ( !v10 )
{
        for ( l = 0; l < 9; ++l )
          Text = v11 ^ 1;
}
```

&emsp;&emsp;5.提示文本有些晕,再看一下我们输入的字符串string,总得比较一下才知道我输入的对不对吧,如果对了不就自己弹出正确的提示了,就不用去想TEXT怎么运算才提示成功。
```
        GetDlgItemTextA(hDlg, 1001, String, 9);
    for ( j = 0; j < 9; ++j )
    {
      if ( String != v12 )
      {
      v10 = 0;
      break;
      }
      v10 = 1;
    }
```

GetDlgItemTextA就是获取我们输入的字符串,string存储的就是我们输入的字符串,if ( String != v12 )这一句就是比较的关键了。

&emsp;&emsp;6.OD中对GetDlgItemTextA下断点:
```
004118CC    0FBE4C05 EC   movsx ecx,byte ptr ss:               ; 123456
004118D1    8B55 8C         mov edx,dword ptr ss:
004118D4    0FBE4415 D8   movsx eax,byte ptr ss:               ; haoshuai
004118D9    3BC8            cmp ecx,eax                                        ; 比较
004118DB    74 09         je short cm.004118E6
```

&emsp;&emsp;7.je直接改jmp,让v10等于1,即可完成爆破,所以正确的字符串是haoshuai。

!(https://s4.ax1x.com/2022/01/14/785Lbq.png)

## 0x3总结
&emsp;&emsp;1.这个生成的好像是debug程序,带很多调试信息,IDA F5反编译很清晰。

&emsp;&emsp;2.ida可以看到代码的大体结构,OD进行调试可以获取实时的参数,变量的值。

&emsp;&emsp;3.study pe比较好用,可以固定基址,也可以探测是否使用公开的加密算法。

petius 发表于 2022-1-14 22:09

赤裸裸的炫耀,真不大敢回你的帖,担心某一天又被申请删了帖{:1_909:}

hw520wh 发表于 2022-1-14 22:09

坚持就是胜利,加油

crudejade 发表于 2022-1-15 10:01

菜老板牛逼克拉斯

源远流长 发表于 2022-1-15 15:53

果然,正确的字符串,haoshuai

囧途漫漫 发表于 2022-1-15 16:35

大佬可以写篇SCI发表了

明珠一颗 发表于 2022-1-15 16:46

张大铁匠 发表于 2022-1-15 18:00

厉害了,{:301_1003:}

weizhuqiang 发表于 2022-1-16 08:46

学习很重要,一步小心落伍了。

yidefuren 发表于 2022-1-16 11:46

恭喜楼主。有耐心一定会成功
页: [1] 2 3
查看完整版本: 学破解第155天,《找一个简单的cm,增加一下信心》