软件分广告版和pro版,区别仅仅是有无广告,功能上区别不大。
教程使用的包名是com.mxtech.videoplayer.ad,64位,版本1.88.3。pro版本不知道去哪里下载。
帖子比较水,没有什么技术含量,了解就行了。
去广告就不说了,都是很简单的内容。
1.png (277.24 KB, 下载次数: 0)
下载附件
2025-1-28 21:14 上传
首先重签名,打开闪退,发现是libmx-bh.so罢工了。不多说丢进ida分析,看看是什么毛病。
按照标准流程先搜索字符串signature,然而并没有发现有用的地方。
2.png (19.67 KB, 下载次数: 0)
下载附件
2025-1-28 21:20 上传
然后再查看输出表,有一些java开头的函数,我们反编译dex看看,都是些什么东东。
3.png (16.49 KB, 下载次数: 0)
下载附件
2025-1-28 21:21 上传
Java_com_ddx_axx_axx_axx_BH_t → public static native t()V
Java_com_ddx_axx_axx_axx_BH_n → private static native n(Landroid/content/Context;ILjava/lang/String;Ljava/lang/String;[BLjava/lang/String;)V
Java_com_ddx_axx_axx_axx_BH_w → public static native w([Ljava/lang/String;)V
Java_com_ddx_axx_axx_axx_BH_n1 → public static native n1(Ljava/lang/Object;)Z
Java_com_ddx_axx_axx_axx_AS_e → public static native e([BIZ)[B
以上是对应的java方法名,从结构上可以看出,如果要藏签名校验的话肯定会在n方法名内,故双击Java_com_ddx_axx_axx_axx_BH_n进入。
__int64 __fastcall Java_com_ddx_axx_axx_axx_BH_n(JNIEnv *a1, __int64 a2, __int64 a3)
{
__int64 result; // x0
__int64 v6; // x0
_BYTE v7[8]; // [xsp+8h] [xbp-8h] BYREF
__int64 v8; // [xsp+28h] [xbp+18h] BYREF
result = ((*a1)->GetJavaVM)(a1, &v8);
if ( !result )
{
sub_32ABC();
sub_3D448(v7);
sub_42460(a1, a3);
sub_2FF5C(v8);
v6 = operator new(0xB8uLL);
*(v6 + 176) = 0LL;
*v6 = 0u;
*(v6 + 16) = 0u;
*(v6 + 32) = 0u;
*(v6 + 48) = 0u;
*(v6 + 64) = 0u;
*(v6 + 80) = 0u;
*(v6 + 96) = 0u;
*(v6 + 112) = 0u;
*(v6 + 128) = 0u;
*(v6 + 144) = 0u;
*(v6 + 160) = 0u;
sub_3D474();
return sub_2F274(a1);
}
return result;
}
前面的函数没什么可看的,注意到后面sub_3D474,我点进去以后发现了更多的代码,特别是这个sub_3D65C,非常引人注目。
4.png (38.91 KB, 下载次数: 0)
下载附件
2025-1-28 21:36 上传
因为进入以后又跳转了一次,而且代码明显是经过混淆的,好像在极力隐藏些什么。我盲猜这里和签名校验有关,所以是不是禁止加载这个函数就可以解决问题呢?
首先为了验证我的猜想,先禁止加载该函数,看看能否正常启动。
5.png (127.1 KB, 下载次数: 0)
下载附件
2025-1-28 21:47 上传
6.png (101.77 KB, 下载次数: 0)
下载附件
2025-1-28 21:50 上传
sub_43964(&v27, a2, a7);
if ( (*(a1 + 40) & 1) != 0 )
operator delete(*(a1 + 56));
v24 = v28;
*(a1 + 40) = v27;
*(a1 + 56) = v24;
v25 = operator new(0x20uLL);
result = sub_2FD98(v25, 0LL, a1);
*a1 = v25;
return result;
如上图汇编代码,修改红框的即可,不能全部填nop,这样会导致指针异常。
第一个ADRP X1, #sub_3D65C@PAGE,直接nop掉,第二个ADD X1, X1, #sub_3D65C@PAGEOFF,改成MOV X1, XZR。
回填后启动看看……果然被我蒙对了