刮开有奖
运行发现有点劣质的刮奖卡片的感觉
查壳无壳32位ida打开
ctrl+F搜索主函数只看到这个
于是shift+F12查看字符串发现这个
双击过去交叉引用发现是函数DialogFunc
刚好对应主函数里调用的函数完美
最后有个判断然后得出结果,所以看一下v7之类的是什么
可以知道输入的String是8个字符,然后v7-v17经过了函数sub_4010F0
的处理
看一下这个函数
int __cdecl sub_4010F0(int a1, int a2, int a3)
{
int result; // eax
int i; // esi
int v5; // ecx
int v6; // edx
result = a3;
for ( i = a2; i <= a3; a2 = i )
{
v5 = 4 * i;
v6 = *(_DWORD *)(4 * i + a1);
if ( a2 < result && i < result )
{
do
{
if ( v6 > *(_DWORD *)(a1 + 4 * result) )
{
if ( i >= result )
break;
++i;
*(_DWORD *)(v5 + a1) = *(_DWORD *)(a1 + 4 * result);
if ( i >= result )
break;
while ( *(_DWORD *)(a1 + 4 * i) <= v6 )
{
if ( ++i >= result )
goto LABEL_13;
}
if ( i >= result )
break;
v5 = 4 * i;
*(_DWORD *)(a1 + 4 * result) = *(_DWORD *)(4 * i + a1);
}
--result;
}
while ( i < result );
}
LABEL_13:
*(_DWORD *)(a1 + 4 * result) = v6;
sub_4010F0(a1, a2, i - 1);
result = a3;
++i;
}
return result;
}
参数齐全很清晰,可以改一下数组然后用C语言跑出来
#include<stdio.h>
void main()
{
int v7[11];
int sub_4010F0(int a1[], int a2, int a3);
v7[0] = 90;
v7[1] = 74;
v7[2] = 83