simplecheck

初步接触安卓逆向的水题;

先丢到jeb里,查看一波。

simplecheck_第1张图片
可以看到逻辑就是通过函数a对输入进行判断,如果对就输出You get it~

我们去a里面查看

simplecheck_第2张图片
发现是一个很简单的算法

判断条件就是a[v0] == b[v0] * v4[v0] * v4[v0] + c[v0] * v4[v0] + d[v0] && a[v0 + 1] == b[v0] * v4[v0 + 1] * v4[v0 + 1] + c[v0] * v4[v0 + 1] + d[v0]    ,而v4[]就是flag;

用c++进行解密:

a.length指出flag的长度为35,并且a[0]=0,所以第一个循环从1到34,v4[]里面存的是字符,ASICC是从0到127,所以第二个循环是从0到127。

判断条件进行变化,使v4变成一个变量值f,则判断条件就是:

a[v0] == b[v0] * f * f+ c[v0] * f + d[v0]

a[v0 + 1] == b[v0] * f  * f + c[v0] * f + d[v0]

最后的解密程序为:

#include

#include

using namespace std;

int a[]={0, 146527998, 205327308, 94243885, 138810487, 408218567, 77866117, 71548549, 563255818, 559010506, 449018203, 576200653, 307283021, 467607947, 314806739, 341420795, 341420795, 469998524, 417733494, 342206934, 392460324, 382290309, 185532945, 364788505, 210058699, 198137551, 360748557, 440064477, 319861317, 676258995, 389214123, 829768461, 534844356, 427514172, 864054312};

int b[]={13710, 46393, 49151, 36900, 59564, 35883, 3517, 52957, 1509, 61207, 63274, 27694, 20932, 37997, 22069, 8438, 33995, 53298, 16908, 30902, 64602, 64028, 29629, 26537, 12026, 31610, 48639, 19968, 45654, 51972, 64956, 45293, 64752, 37108};

int c[]={38129, 57355, 22538, 47767, 8940, 4975, 27050, 56102, 21796, 41174, 63445, 53454, 28762, 59215, 16407, 64340, 37644, 59896, 41276, 25896, 27501, 38944, 37039, 38213, 61842, 43497, 9221, 9879, 14436, 60468, 19926, 47198, 8406, 64666};

int d[]={0, -341994984, -370404060, -257581614, -494024809, -135267265, 54930974, -155841406, 540422378, -107286502, -128056922, 265261633, 275964257, 119059597, 202392013, 283676377, 126284124, -68971076, 261217574, 197555158, -12893337, -10293675, 93868075, 121661845, 167461231, 123220255, 221507, 258914772, 180963987, 107841171, 41609001, 276531381, 169983906, 276158562};

int flag[10001];

int t=0;

int main()

{

for(int i=1;i<=34;i++){

for(int f=0;f<=127;f++){

if((a[i]==b[i]*f*f+c[i]*f+d[i])|a[i]==a[i-1]*f*f+c[i-1]*f+d[i-1]){

flag[t++]=f;

break;

}

}

}

for(int i=0;i

cout<<(char)flag[i];

cout<<"}"<

return 0;

}

结果 为

simplecheck_第3张图片

你可能感兴趣的:(simplecheck)