Android原创开心消消乐lua

0x01定位开心消消乐lua的解析引擎在libhegame.so中,用IDA分析,发现很多函数并没有符号,包括所使用的OpenSSL和Lua的第三方库,增加了逆向的难度。不过字符串并没有加密,可以通过查找".lua""load"这些字符串找到关键地方,通过字符串可以快速定位到加载lua文件的地方。

void__fastcalllua_load(inta1)

{

intv1;//r0

1

intv2;//r3

1

int*v3;//r0

3

intv4;//r0

3

signedintv5;//r7

3

intv6;//r0

4

intv7;//r0

6

intv8;//r5

6

intv9;//r6

12

intv10;//r5

12

intv11;//r0

15

intv12;//r4

15

intv13;//r5

17

intv14;//r4

18

intv15;//r5

7

intv16;//r0

30

intv17;//r6

30

intv18;//r0

30

intv19;//r0

30

intv20;//r0

30

intv21;//r0

30

intv22;//r0

30

intv23;//r0

30

intv24;//r0

30

intv25;//r6

30

intv26;//r0

30

intv27;//r0

31

intv28;//r0

31

int*v29;//r0

33

constchar*v30;//r1

33

intv31;//r0

16

intbuf;//[sp+8h][bp-h]

4

intv33;//[sp+Ch][bp-h]

3

intv34;//[sp+10h][bp-h]

1

intv35;//[sp+1Ch][bp-F4h]

1

charv36;//[sp+20h][bp-F0h]

2

intv37;//[sp+24h][bp-ECh]

3

charv38;//[sp+28h][bp-E8h]

3

charv39;//[sp+2Ch][bp-E4h]

3

charv40;//[sp+30h][bp-E0h]

3

intv41;//[sp+34h][bp-DCh]

3

unsignedintlen;//[sp+38h][bp-D8h]

6

intv43;//[sp+3Ch][bp-D4h]

18

intout;//[sp+40h][bp-D0h]

3

intv45;//[sp+44h][bp-CCh]

1

charv46;//[sp+48h][bp-C8h]

32

v34=a1;

v1=sub_30E();

sub_30D((int)v35,v1,(int)v45);

v2=sub_30D6B0(v35,".lua",0);

if(v2==*(_DWORD*)(v35-12)-4)

{

sub_30D(v36,v35,0,v2);

sub_30D(v35,v36);

sub_30D((int)v36);

}

sub_30D((int)v38,(int)".",(int)out);

sub_30D((int)v39,(int)"/",(int)v45);

sub_C(v40,v35,v38,v39);

v3=(int*)sub_30D(v40,".lua");

v37=*v3;

*v3=(int)unk_3F3A68;

sub_30D((int)v40);

sub_30D((int)v39);

sub_30D((int)v38);

v4=sub_74CD8(v41,"src/",v37);

v33=2;

v5=0;

do

{

v6=sub_BC(v4);

buf=(*(int(**)(void))(*(_DWORD*)v6+16))();

if(buf)

{

v7=sub_EC();

v8=len;

if(v7)

{

sub_74CD8(v45,"

",v37);

v15=sub_30E(v34,buf,v8,v45);//读取lua文件

sub_30D((int)v45);

if(v15)

v5=3;

}

elseif(len=0x10)//这里可以知道这个变量是文件的长度

{

sub_("load_lua","cannotgetenoughfiledataof%s",v41);

v5=5;

}

else

{

if(!(dword_3EC1)sub_30D(dword_3EC))

{

byte_3E=0xE9u;

byte_3E=0x74;

byte_3E=0x92u;

byte_3E=0xCCu;

byte_3E=0x32;

byte_3E=0x2E;

byte_3E=0x2E;

byte_3EA=0x7C;

byte_3EB=0x34;

byte_3EC=0x51;

byte_3ED=0xD7u;

byte_3E2=0x7D;

byte_3E7=0x7D;

byte_3EE=0xB3u;

byte_3E8=0x11;

byte_3EF=0x6A;

sub_30D((int)dword_3EC);

}

v9=len-16;

out=0;

v45=0;

v10=aes_cbc_decrypt((int)byte_3E,buf,buf+16,len-16,out);//第一个参数为keyaes解密IV为文件开头的16个字节

if(v10

(v10=aes_cbc_decrypt((int)byte_3E,buf,buf+16,v9,out))!=0)

{

zib_de


转载请注明:http://www.aierlanlan.com/cyrz/154.html

  • 上一篇文章:
  •   
  • 下一篇文章: