写在前面
整个程序基本上就是一个 动态注册 + so函数加密 的逻辑,中间加了一些parser的东西
主要考察了elf文件结构的一些知识以及在攻防对抗中防止IDA静态分析的姿势
题目描述
找到flag
WriteUp
360加固,先脱壳,看入口函数MainActivity
具体的逻辑写到so里了,使用IDA打开so文件,先看有没有.init和.init_array,发现只有.init_array节,
跟进去一看又是字符串解密函数,解密之后,代码如下(这里我根据解密后的数据进行了重命名)
unsigned int datadiv_decode4192348989750430380()
{
v29 = 0;
do
{
v0 = v29;
Find_ooxx_failed[v29++] ^= 0x14u;
}
while ( v0 < 0x10 );
v28 = 0;
do
{
v1 = v28;
mem_privilege_change_failed[v28++] ^= 0xD3u;
}
while ( v1 < 0x1B );
v27 = 0;
do
{
v2 = v27;
kanxuetest[v27++] ^= 0x63u;
}
while ( v2 < 0xA );
v26 = 0;
do
{
v3 = v26;
Hello_from_Cjiajia[v26++] ^= 0x3Fu;
}
while ( v3 < 0xE );
v25 = 0;
do
{
v4 = v25;
test[v25++] ^= 0xF3u;
}
while ( v4 < 4 );
v24 = 0;
do
{
v5 = v24;
sig_Ljava_lang_Object_Z[v24++] ^= 0xFAu;
}
while ( v5 < 0x15 );
v23 = 0;
do
{
v6 = v23;
com_kanxue_test_MainActivity[v23++] ^= 0x2Du;
}
while ( v6 < 0x1C );
v22 = 0;
do
{
v7 = v22;
maps[v22++] ^= 0xF5u;
}
while ( v7 < 0xD );
v21 = 0;