本帖最后由 芽衣 于 2022-5-29 21:22 编辑
我也去下了这个APP看了一下。
崩溃日志里面有onCreate的优先看onCreate,这APP止步于onCreate还是比较典型的防护设计。com.biquge.ebook.app.app.AppContext.onCreate(AppContext.java:5)他里面应该有什么调用,应该可以追到cVerify。
打开so以后这里是个布尔值,基本上就能知道做了什么导致com.jni.crypt.project.CryptDesManager.init异常,com.jni.crypt.project.CryptDesManager.init掉用cVerify了以后,肯定有什么判断导致代码出错,进而影响到onCreate。还原java没必要,因为他返回的就是个布尔值……
v34 = (*env)->GetStaticMethodID(
env,
a2,
"encodeContent",
"(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;");
v35 = (*env)->CallStaticObjectMethod;
v36 = (*env)->NewStringUTF(env, "OW84U8Eerdb99rtsTXWSILDO");
v37 = (*env)->NewStringUTF(env, "SK8bncVu");
v38 = v35(env, a2, v34, v50, v36, v37);
v51 = (*env)->GetStringUTFChars(env, v38, 0);
free(v30);
v39 = (*env)->FindClass(env, "java/lang/String");
v40 = (*env)->NewObjectArray(env, 65, v39, 0);
v41 = 1;
for ( i = 0; i != 65; ++i )
{
if ( v41 << 31 )
{
v43 = j_nativeTojstring(env, CHAR_KEYS[i]);
(*env)->SetObjectArrayElement(env, v40, i, v43);
v44 = (*env)->GetStringUTFChars(env, v43, 0);
v45 = strcmp(v51, v44) == 0;
v46 = v31;
if ( v45 )
v46 = 1;
}
签名值正确值+OW84U8Eerdb99rtsTXWSILDO+SK8bncVu放入encodeContent进行处理,返回一个字符串。v45 = strcmp(v51, v44) == 0;是个字符串比较命令,返回的还是个布尔值……根据布尔值决定是否进行下一步的解码。如果直接返回布尔值不行就改so跳转。具体我没实操过,不过应该没什么难度。
if ( v47 )
{
PY = "GM8LtuBQ";
KEY = "rRDB457kgPxW1zMsVnscHDgG";
DES_TYPE = "DESede";
DES_MODE = "desede/CBC/PKCS5Padding";
KEY_C = "OW84U8Eerdb99rtsTXWSILDO";
PY_C = "SK8bncVu";
DES_TYPE_C = "DESede";
DES_MODE_C = "desede/CBC/PKCS5Padding";
}
else
{
DES_TYPE = &dword_3968;
PY = &dword_396C;
KEY = &off_3970;
DES_MODE = &dword_3974;
KEY_C = &off_3978;
PY_C = &off_397C;
DES_TYPE_C = &dword_3980;
DES_MODE_C = &dword_3984;
(*env)->ThrowNew(env, a2, "thrown from C code");
}
|