该题不简单:
用IDA 打开,查找字符串,观察流程,找到判断函数,
if ( GetDlgItemTextA(hDlg, 1000, String, 16) >= 5 ) // 判断第一个输入是否大于5个字符
{
GetDlgItemTextA(hDlg, 1001, &String1, 16);
v1 = 0;
if ( strlen(String) != 0 )
{
do
{
*(&String2 + v1) = (v1 + v1 * String[v1] * String[v1]) % 0x42 + 33; //对输出的用户名进行计算得出密钥
++v1;
}
while ( v1 < strlen(String) );
}
strcpy(String, "Happy@"); 赋值String Happy@
lstrcatA(String, &String2); 将计算出的结果放在String后面
result = lstrcmpA(&String1, String) != 0; 比较
}
#include<stdio.h>
#include<string.h>
int main(){
char *a = "hello";
char *b;
int i =0;
while(i<strlen(a)){
*(b + i) = (i + i*a[i]*a[i]) % 0x42 +33;
++i;
}
printf("%s",b);
}