string中找关键,没发现
int __cdecl _matherr(struct _exception *Except)
{
const char *v1; // ecx c的回调函数,当数学函数
// (sqrt,log等)出错,被调用来处理
unsigned int v2; // edx
v1 = "Unknown error";
v2 = Except->type - 1;
if ( v2 <= 5 )
v1 = CSWTCH_5[v2];
fprintf(
&__iob[2],
"_matherr(): %s in %s(%g, %g) (retval=%g)\n",
v1,
Except->name,
Except->arg1, // 结构体中信息
Except->arg2,
Except->retval);
return 0;
}
动调试试,应该有个随机数和一个定值比较
有个显示中文字符的操作
options-->general-->strings,双击utf-8,右键insert输入gbk,选中要修复字符串,按alt+a,选C-style
前面提交不对,发现一个main2函数
写不出来,发现有好几个mainx函数
应该是随机数的生成。
所以需要爆破求出x
aa=[166, 419, 182, 458, 242, 36, 346, 161, 494, 330, 176, 32, 410, 287, 174, 71, 494, 412, 340, 278, 226, 184, 152, 130, 118, 116, 124, 142, 170, 208, 256, 314, 382, 460, 14, 111, 218, 335, 462, 60, 206, 362, 528, 161, 346, 541, 200, 414, 90, 323]
print(aa)
# for i in range(500,550,1):
# for x in range(0xffffffff):
# if x%i==aa[i-500]:
# print(x)
# break
for x in range(0xffffffff):
flag=1
for i in range(500,550,1):
if x%i!=aa[i-500]:
flag=0
break
if flag==1:
print(x)
# 1376666
再进入main2,
随机数 v1 = clock();printf(&aD, v1);在此修改
eax存放随机数,修改eax运行
得到flag。