CrackMe160 学习笔记 之 064
## CrackMe160 学习笔记 之 064## 前言
这是个VB程序。界面还做的挺好看的。
## 思路
对输入字符串转大写计算生成新的字符串并比较验证。
## 分析
### 字符串转大写
```
0040D96F .FF15 3CF14000 call dword ptr [<&MSVBVM50.#528>] ;MSVBVM50.rtcUpperCaseVar
```
### 遍历并计算字符串
```
0040D9BC > /66:3BB5 48FFF>cmp si, word ptr
0040D9C3 . |0F8F 3A010000 jg 0040DB03 ;循环出口
0040D9D5 .52 push edx ; /Length8
0040D9D6 .8D8D 7CFFFFFF lea ecx, dword ptr ; |
0040D9DC .50 push eax ; |Start
0040D9DD .8D55 AC lea edx, dword ptr ; |
0040D9E0 .51 push ecx ; |dString8
0040D9E1 .52 push edx ; |RetBUFFER
0040D9E2 .C745 C4 01000>mov dword ptr , 1 ; |
0040D9E9 .C745 BC 02000>mov dword ptr , 2 ; |
0040D9F0 .C785 7CFFFFFF>mov dword ptr , 4008 ; |
0040D9FA .FF15 30F14000 call dword ptr [<&MSVBVM50.#632>] ; \rtcMidCharVar
0040DA00 .8D45 AC lea eax, dword ptr ;取当前字符
0040DA28 .FF15 08F14000 call dword ptr [<&MSVBVM50.#516>] ; \rtcAnsiValueBstr
0040DA2E .66:2D 4000 sub ax, 40
0040DA32 .0F80 A1020000 jo 0040DCD9
0040DA38 .66:69C0 8200imul ax, ax, 82
0040DA3D .0F80 96020000 jo 0040DCD9
0040DA43 .66:03C7 add ax, di
0040DA46 .0F80 8D020000 jo 0040DCD9
0040DA4C .66:05 5000 add ax, 50
0040DA50 .0F80 83020000 jo 0040DCD9
0040DA56 .66:05 5000 add ax, 50
0040DA5A .0F80 79020000 jo 0040DCD9
0040DA60 .66:05 5000 add ax, 50
0040DA64 .0F80 6F020000 jo 0040DCD9
0040DA6A .66:05 5000 add ax, 50
0040DA6E .0F80 65020000 jo 0040DCD9
0040DA74 .66:05 5000 add ax, 50
0040DA78 .0F80 5B020000 jo 0040DCD9
0040DA7E .66:05 5000 add ax, 50
0040DA82 .0F80 51020000 jo 0040DCD9
0040DA88 .66:05 5000 add ax, 50
0040DA8C .0F80 47020000 jo 0040DCD9
0040DA92 .66:05 5000 add ax, 50
0040DA96 .0F80 3D020000 jo 0040DCD9
0040DA9C .66:05 5000 add ax, 50
0040DAA0 .0F80 33020000 jo 0040DCD9
0040DAA6 .66:05 5000 add ax, 50
0040DAAA .0F80 29020000 jo 0040DCD9
0040DAB0 .66:05 5000 add ax, 50
0040DAB4 .0F80 1F020000 jo 0040DCD9
0040DABA .66:05 5000 add ax, 50
0040DABE .0F80 15020000 jo 0040DCD9
0040DAC4 .66:05 5000 add ax, 50
0040DAC8 .0F80 0B020000 jo 0040DCD9
0040DACE .66:05 5000 add ax, 50
0040DAD2 .0F80 01020000 jo 0040DCD9
0040DAD8 .66:05 5000 add ax, 50
0040DADC .0F80 F7010000 jo 0040DCD9
0040DAE2 .66:05 5000 add ax, 50
0040DAE6 .0F80 ED010000 jo 0040DCD9
0040DAEC .8BF8 mov edi, eax ;edi 保存计算结果
0040DAEE .B8 01000000 mov eax, 1
0040DAF3 .66:03C6 add ax, si
0040DAF6 .0F80 DD010000 jo 0040DCD9
0040DAFC .8BF0 mov esi, eax ;esi 保存循环次数
0040DAFE .^ E9 B9FEFFFF jmp 0040D9BC
```
### 验证
```
0040DB44 .FF15 E8F04000 call dword ptr [<&MSVBVM50.__vbaStrI2>;MSVBVM50.__vbaStrI2
0040DB4A .8BD0 mov edx, eax
0040DB4C .8D4D D0 lea ecx, dword ptr
0040DB4F .FFD3 call ebx
0040DB51 .50 push eax
0040DB52 .FF15 40F14000 call dword ptr [<&MSVBVM50.__vbaStrCm>;MSVBVM50.__vbaStrCmp
0040DB58 .8BF0 mov esi, eax
0040DB5A .8D45 D0 lea eax, dword ptr
0040DB5D .F7DE neg esi
0040DB5F .1BF6 sbb esi, esi
0040DB9C . /74 5E je short 0040DBFC ;关键跳
```
## 注册机代码
```c
#include<stdio.h>
int main(int argc,char** argv)
{
if(argc!=2) return 0;
int len=strlen(argv);
short sum=0;
for(int i=0;i<len;i++)
sum+=(argv&0xDF-0x40)*0x82+0x500;
printf("key:%d",sum);
return 0;
}
```
有一点忘记补充的是,我定义变量为short类型是因为超过会溢出。
## 视频演示
链接: https://pan.baidu.com/s/1ggCCx6goHvImDaylYlfP4w密码: cln3
有什么批评和建议欢迎提出。
欢迎交流。 感谢分享{:1_918:} 感谢分享 感谢分享,仔细学习中 懵逼的走进来 随便看看 感谢分享慢慢感触一下 感谢分享
感谢楼主分享,保留备 厉害,学习了
页:
[1]
2