这是从IDA软件里面按F5后,生成的伪C语言代码,应该如何理解整个代码
function sub_1498(password){
var base=Module.findBaseAddress("libCheckRegister.so")//找到这个so文件
var fadr=base.add(0x1499)//本来是1498,sam指令加1,
var fxb=new NativeFunction(fadr,'int',['pointer','pointer'])//返回值类型sub-1498函数是int,参数是2个指针
var out=Memory.alloc(100)//分配一个100字节的内存
var passwd=Memory.alloc(100)
ptr(passwd).writeUtf8Sring(password)
var ret=fxb(out,passwd)
console.log(hexdump(out))
console.log(ret)
}
bool __fastcall sub_1634(const char *uname, char *passwd)
{
signed int len_name; // r5
_BOOL4 result; // r0
int i; // r4
char *v6; // r7
int v7; // r3
int j; // r4
int v9; // r1
int v11[5]; // [sp+18h] [bp-458h] BYREF
int v12[5]; // [sp+2Ch] [bp-444h] BYREF
char enc_uname[20]; // [sp+40h] [bp-430h] BYREF
char out[1052]; // [sp+54h] [bp-41Ch] BYREF
len_name = j_strlen(uname);
if ( (unsigned int)(len_name - 6) > 0xE )
return 0;
j_memset(enc_uname, 0, sizeof(enc_uname));
for ( i = 0; i != 16; ++i )
{
v6 = &enc_uname[i];
v7 = (unsigned __int8)uname[i % len_name] * (i + 20160126) * len_name;
*(_DWORD *)v6 += v7;
}
j_memset(out, 0, 0x400u);
if ( sub_146C(passwd) > 1024 || sub_1498(out, passwd) != 20 )
return 0;
j_memset(v11, 0, sizeof(v11));
j_memset(v12, 0, sizeof(v12));
for ( j = 0; j != 5; ++j )
{
v9 = *(_DWORD *)&out[j * 4];
v11[j] = *(_DWORD *)&enc_uname[j * 4] / 10;
v12[j] = v9;
}
result = 0;
if ( v12[4] + v11[0] == v12[2]
&& v12[4] + v11[0] + v11[1] == 2 * v12[4]
&& v11[2] + v12[3] == v12[0]
&& v11[2] + v12[3] + v11[3] == 2 * v12[3] )
{
return v11[4] + v12[1] == 3 * v11[2];
}
return result;
}