折旧记录某旅纵横app分析研究
前言
首先申明,这是三年前的事情,当时为了学习研究,未做任何破坏行为,仅在此记录下。
现在很多公司对app安全都非常重视,研究难度越来越大,早前app大多裸奔,随手就能看到java代码,即使通讯加密也都是java层的,一顿分析就能学习到想要的数据。而今各种加壳,反调试,native code等,还有些我不知道的,要学习到数据都要一关一关过。当时用到的一些工具和分析方法,也都是大家熟悉的IDA、Frida、Cydia、Xposed等。
这个app在2019年做过一次大的升级,也就是有两个大版本,暂就叫Ver2019,V2020。
一、Ver2019这个版本
先说Ver2019这个版本,我们拿抓包工具看下,请求是加密的,响应是明文的。
那我们就要看下内部实现是如何加密的。
1、首先7-zip解压apk,解压apk以后就能看到classes.dex。
我们来看下启动application发现apk没有做加壳处理,那就简单多了。
接着进行静态分析
2、 先获取java源代码,使用google开源工具enjarify将dex还原成jar。
3、 拿jd-gui查看源代码
一番分析后找到http请求前body加密位置
到此,基本可以确定加密调用native code。没有它法只能分析so。
4、 拿IDA分析这个so看看。
可以看出方法名没有被混淆,跟java代码调用一样,我们进去看看。
内部调用名称也没混淆了,一目了然,先做md5,再做base64编码。再进去看发现md5跟base64都是在标准的基础上自己做了修改。接下来就比较清楚了,把代码拓下来就行了。
解密结果:
小结
对于仅做native code加密处理的app,被破解的几率太大,首先java代码被暴露,内部处理逻辑也就暴露了,只需逆向分析so即可破解。可能他们也发现了这点,于是做了版本升级。源代码
二、Ver2020版本
接着来说这个版本,这个版本应该是他们意识到要加强安全检查,所以对apk进行了增强。
我们来一步步分析,我们先抓包看看请求数据和响应数据是什么样的,发现请求是加密的,响应主体未加密但内部具体数据经过编码了。
请求:
响应:
同样先7-zip解压看看dex
可以发现dex文件很小,这种基本可以说是加壳了,继续看可以确定是360加固的。
用jd-gui也查看不了这些dex,我们得先去壳。
1、 使用Xposed,配合FDEX2(自己实现插件将动态加载的dex保存下来)就可拿到全部dex文件。
2、先获取java源代码,使用google开源工具enjarify将dex还原成jar。
3、 拿jd-gui查看源代码,一番探索后,内部加密依然调用native code,定位到这个so
4、 还是祭出神器IDA,静态分析
可以看出方法名称混淆过了,我们试着F5看能否反编译出C代码。
能反编译出来,试了下调试不行,so里有反调试ptrace检查。
4、IDA继续分析反调试,确定位置,使用010Editor,NOP掉跳过检查,保存得到一个无反调试的so。
5、写个apk,调用so进行调试分析,发现native code是动态加载,每次都要先P再进行汇编调试,关键函数sub_C182。
具体调试分析过程
第一轮sub_DE514182
R0=FA6623B1 (始终固定值)
R1=FA6623B2
R3=0X6C 0X51 0XF0 0XDE
R4=完整包名
R5=app 包名
R1-R0>0,BLE跳转false
逻辑:
设置R0=46C6706E,BGT跳转false
设置R0=20D2E66E,BGT跳转false
设置R0=0BAAF17E,BGT跳转false
设置R0=021DA53C,BGT跳转false
设置R0=06917948,BGT跳转false
跳转sub_DE5156E4
设置R0=FCD1BC6C,BLE跳转true
设置R0=FA989437,BLE跳转true
设置R0=FA6623B2,BNE跳转false;注意这里将R0设置=R1
设置R1=FFE34E50(LDR R1, =0x6C8),地址内容指向 a(可能是R5 的app)
将R1设置成R1指向的内容0x61(即a)
设置R6
比较R1-0x68=-7,BNE跳转true
第二轮sub_DE514182
R1=A0265BB6
逻辑:
BLE跳转true
设置R0=B9FA56DE,BGT跳转false
设置R0=9CED5717,BGT跳转true
设置R0=A9C59D34,BLE跳转true
设置R0=A50B85A0,BLE跳转true
设置R0=A017CF62,BGT跳转true
设置R0=A22E8FD2,BGT跳转false
R6=ECB0C567; 0x6E;字符n
总结得出,先将包名com.umetrip.android.msky.app的.替换成/,提供给__vfprintf %s BuildConfig 格式化,
地址FFAA1AE0指向com.umetrip.android.msky.app.BuildConfig
得到com/umetrip/android/msky/app/BuildConfig
接着进行签名验证,接着看到一个字符串,可能重要:JWV2XBY8JWiQRfTy0MFRk
sub_DE51C70C(对应函数sub_1470C)加载BuildConfig特殊字符: ;GUWRX4k
感觉是得到这个dXJHMGk4
接着又看到一个相似字符串,可能转换得来的:JWV2XBY8JwiQRfTy0MFRkY0
该22位字符串是固定值初始化出来的
[stack]:FFAA1AB8 DCB 0x4A ; J [stack]:FFAA1AB9 DCB 0x77 ; w [stack]:FFAA1ABA DCB 0x56 ; V [stack]:FFAA1ABB DCB 0x32 ; 2 [stack]:FFAA1ABC DCB 0x58 ; X [stack]:FFAA1ABD DCB 0x42 ; B [stack]:FFAA1ABE DCB 0x59 ; Y [stack]:FFAA1ABF DCB 0x38 ; 8 [stack]:FFAA1AC0 DCB 0x4A ; J [stack]:FFAA1AC1 DCB 0x77 ; w [stack]:FFAA1AC2 DCB 0x69 ; i [stack]:FFAA1AC3 DCB 0x51 ; Q [stack]:FFAA1AC4 DCB 0x52 ; R [stack]:FFAA1AC5 DCB 0x66 ; f [stack]:FFAA1AC6 DCB 0x54 ; T [stack]:FFAA1AC7 DCB 0x79 ; y [stack]:FFAA1AC8 DCB 0x30 ; 0 [stack]:FFAA1AC9 DCB 0x4D ; M [stack]:FFAA1ACA DCB 0x46 ; F [stack]:FFAA1ACB DCB 0x52 ; R [stack]:FFAA1ACC DCB 0x6B ; k [stack]:FFAA1ACD DCB 0x59 ; Y [stack]:FFAA1ACE DCB 0x30 ; 0
还有个相似字符串:JdV2XBY8JwiQRfTy0MFRkY0
R7: gRGQ@
接着遇到sub_DE51B748,发现特殊定义字符U^S4H!%u的使用,接着进入函数sub_DE50F010,大概逻辑好像是循环这个字符串U^S4H!%u,发现一个特殊字符:R0=Um5CY0RW,接着出现新代码,发现特殊字符串:JdXJHMGk4UiQRfTy0MFRkY0,可能最后字符串是J dXJHMGk4 Um5CY0 RWMFRkY0。
但是到m的时候,进入另外的逻辑,接着发现特殊so字符串: wY'siU,接着进入函数sub_DE510FE4,发现逻辑在生成一个字符串:aEpmTA,新发现,wY'siU是个地址的表示,指向aEpmTA,接着进入函数sub_DE516546->sub_DE518898->sub_DE516EE2,过程中发现有R1指向aEpmTA,有R2指向JdXJHMGk4Um5CY0RWMFRkY0。
加载新代码sub_DE515404,不知觉进入base64字符函数sub_11B80,之前的特殊字符中有出现dXJH,进入函数sub_DE519B80,主要逻辑是找到使用签名函数的调用,需要R1=0xC7A245B4,感觉是个switch,循环了一遍发现是在用dXJH做循环,内部从1-1D循环,在H循环到大概4-5的时候,加载了新代码。
接着发现在生成特殊字符串:urG,发现逻辑好像出现之前字符串R0指向JdXJHMGk4Um5CY0RWaEpmTA,好像在循环这个字符串M->G,发现在生成一个特殊字符串:MGk4urG。
接着再次进入1-B, 1-8,1-0X24的循环,此时R1=C8646999,不符合C7A245B4,当到最外层到达0X24的时候加载了新代码,进入函数sub_DE51750C,发现特殊字符串:Uf7TV。
接着加载新代码进入函数sub_DE51681C,发现有使用$字符,马上发现在接着生成特殊字符串:$4urG,接着发现又进入1-0X34循环,发现特殊字符串:$80i8
接着发现继续生成特殊字符urG0i8,好像是跟上面的字符连接起来,同时发现在生成特殊字符串,目前看到的是Um5$80i8,好像使用的是上面的字符串中的字符JdXJHMGk4Um5CY0RWMFRkY0
接着到C的是变成了Um5C0i8,接着再次回到了R1=C8646999,前面一小部分进入的是R1=C9开头的,再次进入循环1-D,多次N循环,发现接着生成特殊字符串:urG0i8RnBow,发现有使用JdXJHMGk4Um5CY0RWaEpmTA字符串,在用字符Y 生成一个小字符串Y&9,紧跟着还有一个小字符串:RnB。
几步之后变成了Y09,原来是在生成Y0RWRnB,再次进入循环1-0X34。还在R1=C8646999中 大概5-6次大循环
开始进入R1=C95E12F5
发现特殊字符串:urG0i8RnBcwDV
发现在生成特殊字符串:aEpmcDV、+rG0i8
第一轮调试无疾而终。
第二次调试
发现在函数sub_DE517C3A流程里加载了要加密的明文字符串。
_ZN3art8CheckJNI21ReleaseStringUTFCharsEP7_JNIEnvP8_jstringPKc
_ZN3art3JNI21ReleaseStringUTFCharsEP7_JNIEnvP8_jstringPKc
0xF4C17D20 值 0x14 0x39 0xB7 0xF4
第三次调试关键点
sub_DE514182
发现公钥如下:
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCu0+b9I6BjAY1Yh4GygJ+Xs0IUqwNXEy+8uFHD
5R6mR3f+G+oZrj63pnjpGWEjbug6WfnY2R7nKAaKdnt+48DUTWvcWg7HIeKdqHyjjwM1bkDYqgKU
PknrQ1La0vAY4hum7w9ho3s0u2eC+0G3UvAPmhic4H0Hw6XmYphlxTx5NwIDAQAB
-----END PUBLIC KEY-----
加密详细过程
地址0x14 0x39 0x87 0xF4,好像是加密操作的对象地址
_ZN3art8CheckJNI9FindClassEP7_JNIEnvPKc art::CheckJNI::FindClass(_JNIEnv *,char const*)+1
0xE0 0x1A 0xAA 0xFF
根据R1的信息看出寻找BuildConfig类
_ZN3art8CheckJNI16GetStaticFieldIDEP7_JNIEnvP7_jclassPKcS6_
art::CheckJNI:GetStaticFieldID(_JNIEnv *,_jclass *,char const*,char const*)+1
寻找静态字段id
_ZN3art8CheckJNI20GetStaticObjectFieldEP7_JNIEnvP7_jclassP9_jfieldID
art:CheckJNI:GetStaticObjectField(_JNIEnv *,_jclass *,char const*,char const*)+1
获取静态字段值
_ZN3art8CheckJNI14DeleteLocalRefEP7_JNIEnvP8_jobject
art::CheckJNI::DeleteLocalRef(_JNIEnv *,_jobject *)+1
应该是释放字符串资源吧
_ZN3art8CheckJNI16CallObjectMethodEP7_JNIEnvP8_jobjectP10_jmethodIDz
接着是些system@framework@boot.art这样的操作,感觉现在才完成BuildConfig的操作,接下来应该是获取packageInfo这块,为什么会直接获取对象类,可能是在OnLoad的时候加载后保存的指针。
_ZN3art8CheckJNI14GetObjectClassEP7_JNIEnvP8_jobject
art::CheckJNI::GetObjectClass(_JNIEnv *,_jobject *)+1
获取signatures字段Id
_ZN3art8CheckJNI10GetFieldIDEP7_JNIEnvP7_jclassPKcS6_
art::CheckJNI::GetFieldID(_JNIEnv *,_jclass *,char const*,char const*)+1
获取字段
_ZN3art8CheckJNI14GetObjectFieldEP7_JNIEnvP8_jobjectP9_jfieldID
art::CheckJNI::GetObjectField(_JNIEnv *,_jobject *,_jfieldID *)+1
获取对象数组元素
_ZN3art8CheckJNI21GetObjectArrayElementEP7_JNIEnvP13_jobjectArrayi
art::CheckJNI::GetObjectArrayElement(_JNIEnv *,_jobjectArray *,int)+1
大概是获取的索引[0]签名对象
_ZN3art8CheckJNI14GetObjectClassEP7_JNIEnvP8_jobject
art::CheckJNI::GetObjectClass(_JNIEnv *,_jobject *)+1
获取hashCode方法Id
_ZN3art8CheckJNI11GetMethodIDEP7_JNIEnvP7_jclassPKcS6_
art::CheckJNI::GetMethodID(_JNIEnv *,_jclass *,char const*,char const*)+1
调用获取hashCode的方法
_ZN3art8CheckJNI13CallIntMethodEP7_JNIEnvP8_jobjectP10_jmethodIDz DCB
art::CheckJNI::CallIntMethod(_JNIEnv *,_jobject *,_jmethodID *,...)+1
感觉逻辑不对,发现个新字符串 78700%9:
重点寻找 0x43 0x120 0x70
FFAA1040 FFAA1AA4 都指向dXJHMGk4
;GUWRX4k U^S4H!%u wY'siU
Um5CY0RW
urG0i8RnBPher
发现调用明文Hex,通过对明文跟踪,可以一步步找到加密逻辑。
7B 22 6C 61 73 74 52 65 71 54 69 6D 65 22 3A 22 33 36 35 22 2C 22 6C 61 73 74 54 72 61 6E 73 61 63 74 69 6F 6E 49 44 22 3A 22 31 39 64 37 36 31 31 30 30 30 32 31 31 35 38 33 35 38 39 32 37 36 32 34 31 22 2C 22 6C 61 74 69 74 75 64 65 22 3A 22 22 2C 22 6C 6F 6E 67 69 74 75 64 65 22 3A 22 22 2C 22 6E 65 74 54 79 70 65 22 3A 22 31 22 2C 22 70 61 67 65 49 64 22 3A 22 31 30 36 33 30 33 22 2C 22 72 63 68 61 6E 6E 65 6C 22 3A 22 31 30 30 30 30 30 30 30 22 2C 22 72 63 75 75 69 64 22 3A 22 31 39 64 37 36 63 33 39 31 62 32 32 30 34 30 30 36 39 39 38 38 38 35 33 37 61 33 65 64 38 34 37 37 22 2C 22 72 63 76 65 72 22 3A 22 41 4E 44 5F 61 30 31 5F 30 35 2E 31 38 2E 30 32 32 36 22 2C 22 72 6B 65 79 22 3A 22 32 30 32 30 2D 30 33 2D 30 37 20 32 31 3A 35 37 3A 30 33 20 38 30 30 30 22 2C 22 72 70 61 72 61 6D 73 22 3A 7B 22 64 65 70 74 41 69 72 70 6F 72 74 43 6F 64 65 22 3A 22 53 48 45 22 2C 22 64 65 70 74 46 6C 69 67 68 74 44 61 74 65 22 3A 22 32 30 32 30 2D 30 33 2D 32 35 22 2C 22 64 65 73 74 41 69 72 70 6F 72 74 43 6F 64 65 22 3A 22 4A 4A 4E 22 2C 22 66 6C 69 67 68 74 4E 6F 22 3A 22 4B 59 38 32 34 32 22 7D 2C 22 72 70 69 64 22 3A 22 31 30 36 30 30 33 31 22 2C 22 72 70 76 65 72 22 3A 22 31 2E 30 22 2C 22 72 73 69 64 22 3A 22 66 65 38 33 66 64 66 32 2D 35 30 32 38 2D 34 38 65 30 2D 39 39 34 62 2D 62 64 32 37 61 35 38 4B 59 76 32 63 4D 58 43 44 49 33 22 2C 22 74 72 61 6E 73 61 63 74 69 6F 6E 49 44 22 3A 22 31 39 64 37 36 31 30 36 30 30 33 31 31 35 38 33 35 38 39 34 32 33 31 32 32 22 7D
原来是通过计算得到的hex值,base64字符串[hex值转成十进制对应到]
明文参数地址0xDE0A9400 0xDE0A9600
SP=@ 地址FFAA1178
密文地址在哪里 DE0A9800?
@ %
每组操作36次,16个字节,操作4次,前3次每次变化4个字节,最后一次全变化
DE0A9800 FB 12 DF D9 DF B3 9D 44 F5 87 2F 53 EE 9C BD 62 DE0A9810 33 12 B4 DD 9C CD 47 A E7 7D 53 C2 25 3E 1D 11 DE0A9820 32 6E 2A F5 D3 6A CA 1F 8B 3B FF E7 B4 DB F1 5D DE0A9830 3B D9 68 77 F1 4E 9 69 31 5C 71 4F C6 E0 EA 9C DE0A9840 9A B9 27 B5 AA A9 D9 2D 62 51 98 72 82 4F 77 87 DE0A9850 1F B4 66 C1 76 62 DB 3 8 81 B6 F1 6D c 26 A2 DE0A9860 32 B8 7C C5 B4 D 6 BE E1 7E A5 BE 94 27 ED D0 DE0A9870 30 AC 74 FE 2A 4 C8 F1 32 43 42 4F 35 87 65 DE0A9880 FFAA17F0 [anon:libc_malloc]:DE0A9800 DCB 0xFB [anon:libc_malloc]:DE0A9801 DCB 0x12 [anon:libc_malloc]:DE0A9802 DCB 0xDF [anon:libc_malloc]:DE0A9803 DCB 0xD9 [anon:libc_malloc]:DE0A9804 DCB 0xDF [anon:libc_malloc]:DE0A9805 DCB 0xB3 [anon:libc_malloc]:DE0A9806 DCB 0x9D [anon:libc_malloc]:DE0A9807 DCB 0x44 ; D [anon:libc_malloc]:DE0A9808 DCB 0xF5 [anon:libc_malloc]:DE0A9809 DCB 0x87 [anon:libc_malloc]:DE0A980A DCB 0x2F ; / [anon:libc_malloc]:DE0A980B DCB 0x53 ; S [anon:libc_malloc]:DE0A980C DCB 0xEE [anon:libc_malloc]:DE0A980D DCB 0x9C [anon:libc_malloc]:DE0A980E DCB 0xBD [anon:libc_malloc]:DE0A980F DCB 0x62 ; b [anon:libc_malloc]:DE0A9810 DCB 0x33 ; 3 [anon:libc_malloc]:DE0A9811 DCB 0x12 [anon:libc_malloc]:DE0A9812 DCB 0xB4 [anon:libc_malloc]:DE0A9813 DCB 0xDD [anon:libc_malloc]:DE0A9814 DCB 0x9C [anon:libc_malloc]:DE0A9815 DCB 0xCD [anon:libc_malloc]:DE0A9816 DCB 0x47 ; G [anon:libc_malloc]:DE0A9817 DCB 0xA [anon:libc_malloc]:DE0A9818 DCB 0xE7 [anon:libc_malloc]:DE0A9819 DCB 0x7D ; } [anon:libc_malloc]:DE0A981A DCB 0x53 ; S [anon:libc_malloc]:DE0A981B DCB 0xC2 [anon:libc_malloc]:DE0A981C DCB 0x25 ; % [anon:libc_malloc]:DE0A981D DCB 0x3E ; > [anon:libc_malloc]:DE0A981E DCB 0x1D [anon:libc_malloc]:DE0A981F DCB 0x11 [anon:libc_malloc]:DE0A9820 DCB 0x32 ; 2 [anon:libc_malloc]:DE0A9821 DCB 0x6E ; n [anon:libc_malloc]:DE0A9822 DCB 0x2A ; * [anon:libc_malloc]:DE0A9823 DCB 0xF5 [anon:libc_malloc]:DE0A9824 DCB 0xD3 [anon:libc_malloc]:DE0A9825 DCB 0x6A ; j [anon:libc_malloc]:DE0A9826 DCB 0xCA [anon:libc_malloc]:DE0A9827 DCB 0x1F [anon:libc_malloc]:DE0A9828 DCB 0x8B [anon:libc_malloc]:DE0A9829 DCB 0x3B ; ; [anon:libc_malloc]:DE0A982A DCB 0xFF [anon:libc_malloc]:DE0A982B DCB 0xE7 [anon:libc_malloc]:DE0A982C DCB 0xB4 [anon:libc_malloc]:DE0A982D DCB 0xDB [anon:libc_malloc]:DE0A982E DCB 0xF1 [anon:libc_malloc]:DE0A982F DCB 0x5D ; ] [anon:libc_malloc]:DE0A9830 DCB 0x2B ; + [anon:libc_malloc]:DE0A9831 DCB 0x3B ; ; [anon:libc_malloc]:DE0A9832 DCB 0xA4 [anon:libc_malloc]:DE0A9833 DCB 0x2C ; , [anon:libc_malloc]:DE0A9834 DCB 0x78 ; x [anon:libc_malloc]:DE0A9835 DCB 0xA [anon:libc_malloc]:DE0A9836 DCB 0x1D [anon:libc_malloc]:DE0A9837 DCB 0x52 ; R [anon:libc_malloc]:DE0A9838 DCB 0x46 ; F [anon:libc_malloc]:DE0A9839 DCB 0xFA [anon:libc_malloc]:DE0A983A DCB 0xBA [anon:libc_malloc]:DE0A983B DCB 0x67 ; g [anon:libc_malloc]:DE0A983C DCB 0xB3 [anon:libc_malloc]:DE0A983D DCB 0x35 ; 5 [anon:libc_malloc]:DE0A983E DCB 0x11 [anon:libc_malloc]:DE0A983F DCB 0xF5 [anon:libc_malloc]:DE0A9840 DCB 0x9A [anon:libc_malloc]:DE0A9841 DCB 0xB9 [anon:libc_malloc]:DE0A9842 DCB 0x27 ; ' [anon:libc_malloc]:DE0A9843 DCB 0xB5 [anon:libc_malloc]:DE0A9844 DCB 0xAA [anon:libc_malloc]:DE0A9845 DCB 0xA9 [anon:libc_malloc]:DE0A9846 DCB 0xD9 [anon:libc_malloc]:DE0A9847 DCB 0x2D ; - [anon:libc_malloc]:DE0A9848 DCB 0x62 ; b [anon:libc_malloc]:DE0A9849 DCB 0x51 ; Q [anon:libc_malloc]:DE0A984A DCB 0x98 [anon:libc_malloc]:DE0A984B DCB 0x72 ; r [anon:libc_malloc]:DE0A984C DCB 0x82 [anon:libc_malloc]:DE0A984D DCB 0x4F ; O [anon:libc_malloc]:DE0A984E DCB 0x77 ; w [anon:libc_malloc]:DE0A984F DCB 0x87 [anon:libc_malloc]:DE0A9850 DCB 0x1F [anon:libc_malloc]:DE0A9851 DCB 0xB4 [anon:libc_malloc]:DE0A9852 DCB 0x66 ; f [anon:libc_malloc]:DE0A9853 DCB 0xC1 [anon:libc_malloc]:DE0A9854 DCB 0x76 ; v [anon:libc_malloc]:DE0A9855 DCB 0x62 ; b [anon:libc_malloc]:DE0A9856 DCB 0xDB [anon:libc_malloc]:DE0A9857 DCB 3 [anon:libc_malloc]:DE0A9858 DCB 8 [anon:libc_malloc]:DE0A9859 DCB 0x81 [anon:libc_malloc]:DE0A985A DCB 0xB6 [anon:libc_malloc]:DE0A985B DCB 0xF1 [anon:libc_malloc]:DE0A985C DCB 0x6D ; m [anon:libc_malloc]:DE0A985D DCB 0xC [anon:libc_malloc]:DE0A985E DCB 0x26 ; & [anon:libc_malloc]:DE0A985F DCB 0xA2 [anon:libc_malloc]:DE0A9860 DCB 0x32 ; 2 [anon:libc_malloc]:DE0A9861 DCB 0xB8 [anon:libc_malloc]:DE0A9862 DCB 0x7C ; | [anon:libc_malloc]:DE0A9863 DCB 0xC5 [anon:libc_malloc]:DE0A9864 DCB 0xB4 [anon:libc_malloc]:DE0A9865 DCB 0xD [anon:libc_malloc]:DE0A9866 DCB 6 [anon:libc_malloc]:DE0A9867 DCB 0xBE [anon:libc_malloc]:DE0A9868 DCB 0xE1 [anon:libc_malloc]:DE0A9869 DCB 0x7E ; ~ [anon:libc_malloc]:DE0A986A DCB 0xA5 [anon:libc_malloc]:DE0A986B DCB 0xBE [anon:libc_malloc]:DE0A986C DCB 0x94 [anon:libc_malloc]:DE0A986D DCB 0x27 ; ' [anon:libc_malloc]:DE0A986E DCB 0xED [anon:libc_malloc]:DE0A986F DCB 0xD0 [anon:libc_malloc]:DE0A9870 DCB 0x75 ; u [anon:libc_malloc]:DE0A9871 DCB 0x30 ; 0 [anon:libc_malloc]:DE0A9872 DCB 0xAC [anon:libc_malloc]:DE0A9873 DCB 0x74 ; t [anon:libc_malloc]:DE0A9874 DCB 0xFE [anon:libc_malloc]:DE0A9875 DCB 0x2A ; * [anon:libc_malloc]:DE0A9876 DCB 4 [anon:libc_malloc]:DE0A9877 DCB 0xC3 [anon:libc_malloc]:DE0A9878 DCB 0xF1 [anon:libc_malloc]:DE0A9879 DCB 0x32 ; 2 [anon:libc_malloc]:DE0A987A DCB 0x43 ; C [anon:libc_malloc]:DE0A987B DCB 0x42 ; B [anon:libc_malloc]:DE0A987C DCB 0x4F ; O [anon:libc_malloc]:DE0A987D DCB 0x35 ; 5 [anon:libc_malloc]:DE0A987E DCB 0x87 [anon:libc_malloc]:DE0A987F DCB 0x65 ; e [anon:libc_malloc]:DE0A9880 DCB 6 [anon:libc_malloc]:DE0A9881 DCB 0x70 ; p [anon:libc_malloc]:DE0A9882 DCB 0x71 ; q [anon:libc_malloc]:DE0A9883 DCB 0x39 ; 9 [anon:libc_malloc]:DE0A9884 DCB 0xA [anon:libc_malloc]:DE0A9885 DCB 0x42 ; B [anon:libc_malloc]:DE0A9886 DCB 0x59 ; Y [anon:libc_malloc]:DE0A9887 DCB 0x59 ; Y [anon:libc_malloc]:DE0A9888 DCB 0x2F ; / [anon:libc_malloc]:DE0A9889 DCB 0xE7 [anon:libc_malloc]:DE0A988A DCB 0x52 ; R [anon:libc_malloc]:DE0A988B DCB 0x57 ; W [anon:libc_malloc]:DE0A988C DCB 3 [anon:libc_malloc]:DE0A988D DCB 0xBD [anon:libc_malloc]:DE0A988E DCB 0x6D ; m [anon:libc_malloc]:DE0A988F DCB 0xDB [anon:libc_malloc]:DE0A9890 DCB 0xCF [anon:libc_malloc]:DE0A9891 DCB 0xF1 [anon:libc_malloc]:DE0A9892 DCB 0x62 ; b [anon:libc_malloc]:DE0A9893 DCB 0xD2 [anon:libc_malloc]:DE0A9894 DCB 0x28 ; ( [anon:libc_malloc]:DE0A9895 DCB 0x54 ; T [anon:libc_malloc]:DE0A9896 DCB 0xF9 [anon:libc_malloc]:DE0A9897 DCB 0x69 ; i [anon:libc_malloc]:DE0A9898 DCB 0xB5 [anon:libc_malloc]:DE0A9899 DCB 0x2D ; - [anon:libc_malloc]:DE0A989A DCB 0xCB [anon:libc_malloc]:DE0A989B DCB 0x2D ; - [anon:libc_malloc]:DE0A989C DCB 0x16 [anon:libc_malloc]:DE0A989D DCB 0x97 [anon:libc_malloc]:DE0A989E DCB 0xDC [anon:libc_malloc]:DE0A989F DCB 0x7B ; { [anon:libc_malloc]:DE0A98A0 DCB 0xA5 [anon:libc_malloc]:DE0A98A1 DCB 0x23 ; # [anon:libc_malloc]:DE0A98A2 DCB 0x9F [anon:libc_malloc]:DE0A98A3 DCB 0xC6 [anon:libc_malloc]:DE0A98A4 DCB 0x6E ; n [anon:libc_malloc]:DE0A98A5 DCB 0x22 ; " [anon:libc_malloc]:DE0A98A6 DCB 0x7C ; | [anon:libc_malloc]:DE0A98A7 DCB 0x86 [anon:libc_malloc]:DE0A98A8 DCB 0x94 [anon:libc_malloc]:DE0A98A9 DCB 0x39 ; 9 [anon:libc_malloc]:DE0A98AA DCB 0xCA [anon:libc_malloc]:DE0A98AB DCB 0x21 ; ! [anon:libc_malloc]:DE0A98AC DCB 0x36 ; 6 [anon:libc_malloc]:DE0A98AD DCB 0x7A ; z [anon:libc_malloc]:DE0A98AE DCB 0x41 ; A [anon:libc_malloc]:DE0A98AF DCB 0x4A ; J [anon:libc_malloc]:DE0A98B0 DCB 0x56 ; V [anon:libc_malloc]:DE0A98B1 DCB 0x39 ; 9 [anon:libc_malloc]:DE0A98B2 DCB 0x37 ; 7 [anon:libc_malloc]:DE0A98B3 DCB 0x1F [anon:libc_malloc]:DE0A98B4 DCB 0xBD [anon:libc_malloc]:DE0A98B5 DCB 0x11 [anon:libc_malloc]:DE0A98B6 DCB 0xA3 [anon:libc_malloc]:DE0A98B7 DCB 0x83 [anon:libc_malloc]:DE0A98B8 DCB 0x4F ; O [anon:libc_malloc]:DE0A98B9 DCB 0x57 ; W [anon:libc_malloc]:DE0A98BA DCB 0xCE [anon:libc_malloc]:DE0A98BB DCB 0x61 ; a [anon:libc_malloc]:DE0A98BC DCB 0xA5 [anon:libc_malloc]:DE0A98BD DCB 0x26 ; & [anon:libc_malloc]:DE0A98BE DCB 0xC5 [anon:libc_malloc]:DE0A98BF DCB 0xE6 [anon:libc_malloc]:DE0A98C0 DCB 0x91 [anon:libc_malloc]:DE0A98C1 DCB 0xEB [anon:libc_malloc]:DE0A98C2 DCB 0x9C [anon:libc_malloc]:DE0A98C3 DCB 0x72 ; r [anon:libc_malloc]:DE0A98C4 DCB 0x6E ; n [anon:libc_malloc]:DE0A98C5 DCB 0x24 ; $ [anon:libc_malloc]:DE0A98C6 DCB 0x11 [anon:libc_malloc]:DE0A98C7 DCB 0x99 [anon:libc_malloc]:DE0A98C8 DCB 0xE5 [anon:libc_malloc]:DE0A98C9 DCB 0xC8 [anon:libc_malloc]:DE0A98CA DCB 0x7F ; [anon:libc_malloc]:DE0A98CB DCB 0xD [anon:libc_malloc]:DE0A98CC DCB 0xFD [anon:libc_malloc]:DE0A98CD DCB 0x82 [anon:libc_malloc]:DE0A98CE DCB 9 [anon:libc_malloc]:DE0A98CF DCB 0xA6 [anon:libc_malloc]:DE0A98D0 DCB 0xE8 [anon:libc_malloc]:DE0A98D1 DCB 0x22 ; " [anon:libc_malloc]:DE0A98D2 DCB 0x43 ; C [anon:libc_malloc]:DE0A98D3 DCB 0xDA [anon:libc_malloc]:DE0A98D4 DCB 0xB3 [anon:libc_malloc]:DE0A98D5 DCB 0xF7 [anon:libc_malloc]:DE0A98D6 DCB 0x27 ; ' [anon:libc_malloc]:DE0A98D7 DCB 0xA6 [anon:libc_malloc]:DE0A98D8 DCB 0x8B [anon:libc_malloc]:DE0A98D9 DCB 0x21 ; ! [anon:libc_malloc]:DE0A98DA DCB 0xFF [anon:libc_malloc]:DE0A98DB DCB 0x74 ; t [anon:libc_malloc]:DE0A98DC DCB 0x39 ; 9 [anon:libc_malloc]:DE0A98DD DCB 0xB3 [anon:libc_malloc]:DE0A98DE DCB 0x65 ; e [anon:libc_malloc]:DE0A98DF DCB 0x96 [anon:libc_malloc]:DE0A98E0 DCB 0x86 [anon:libc_malloc]:DE0A98E1 DCB 8 [anon:libc_malloc]:DE0A98E2 DCB 0xF6 [anon:libc_malloc]:DE0A98E3 DCB 0x3C ; < [anon:libc_malloc]:DE0A98E4 DCB 0xAF [anon:libc_malloc]:DE0A98E5 DCB 0x17 [anon:libc_malloc]:DE0A98E6 DCB 0x63 ; c [anon:libc_malloc]:DE0A98E7 DCB 0x43 ; C [anon:libc_malloc]:DE0A98E8 DCB 0xFD [anon:libc_malloc]:DE0A98E9 DCB 0x42 ; B [anon:libc_malloc]:DE0A98EA DCB 0xC0 [anon:libc_malloc]:DE0A98EB DCB 0xD9 [anon:libc_malloc]:DE0A98EC DCB 0x99 [anon:libc_malloc]:DE0A98ED DCB 4 [anon:libc_malloc]:DE0A98EE DCB 0x69 ; i [anon:libc_malloc]:DE0A98EF DCB 0x40 ; @ [anon:libc_malloc]:DE0A98F0 DCB 0xAF [anon:libc_malloc]:DE0A98F1 DCB 0x25 ; % [anon:libc_malloc]:DE0A98F2 DCB 0x82 [anon:libc_malloc]:DE0A98F3 DCB 0xCC [anon:libc_malloc]:DE0A98F4 DCB 0x35 ; 5 [anon:libc_malloc]:DE0A98F5 DCB 0x56 ; V [anon:libc_malloc]:DE0A98F6 DCB 0xD7 [anon:libc_malloc]:DE0A98F7 DCB 0x7D ; } [anon:libc_malloc]:DE0A98F8 DCB 0xE7 [anon:libc_malloc]:DE0A98F9 DCB 0xC2 [anon:libc_malloc]:DE0A98FA DCB 0x3E ; > [anon:libc_malloc]:DE0A98FB DCB 0x8F [anon:libc_malloc]:DE0A98FC DCB 0xA [anon:libc_malloc]:DE0A98FD DCB 0x87 [anon:libc_malloc]:DE0A98FE DCB 0x94 [anon:libc_malloc]:DE0A98FF DCB 0x3A ; : [anon:libc_malloc]:DE0A9900 DCB 0x44 ; D [anon:libc_malloc]:DE0A9901 DCB 0xA [anon:libc_malloc]:DE0A9902 DCB 0x58 ; X [anon:libc_malloc]:DE0A9903 DCB 0xF4 [anon:libc_malloc]:DE0A9904 DCB 0x6E ; n [anon:libc_malloc]:DE0A9905 DCB 0xC0 [anon:libc_malloc]:DE0A9906 DCB 0xEA [anon:libc_malloc]:DE0A9907 DCB 0xD8 [anon:libc_malloc]:DE0A9908 DCB 0x9D [anon:libc_malloc]:DE0A9909 DCB 0x2B ; + [anon:libc_malloc]:DE0A990A DCB 0x5A ; Z [anon:libc_malloc]:DE0A990B DCB 0xE5 [anon:libc_malloc]:DE0A990C DCB 0x92 [anon:libc_malloc]:DE0A990D DCB 0xDB [anon:libc_malloc]:DE0A990E DCB 0x5C ; \ [anon:libc_malloc]:DE0A990F DCB 0x9E [anon:libc_malloc]:DE0A9910 DCB 0x50 ; P [anon:libc_malloc]:DE0A9911 DCB 0x86 [anon:libc_malloc]:DE0A9912 DCB 0x89 [anon:libc_malloc]:DE0A9913 DCB 0x87 [anon:libc_malloc]:DE0A9914 DCB 0xB1 [anon:libc_malloc]:DE0A9915 DCB 0x63 ; c [anon:libc_malloc]:DE0A9916 DCB 0x7E ; ~ [anon:libc_malloc]:DE0A9917 DCB 0x1B [anon:libc_malloc]:DE0A9918 DCB 0xC [anon:libc_malloc]:DE0A9919 DCB 0xD3 [anon:libc_malloc]:DE0A991A DCB 0x39 ; 9 [anon:libc_malloc]:DE0A991B DCB 0x1F [anon:libc_malloc]:DE0A991C DCB 0x15 [anon:libc_malloc]:DE0A991D DCB 0x61 ; a [anon:libc_malloc]:DE0A991E DCB 0xC8 [anon:libc_malloc]:DE0A991F DCB 0xAD [anon:libc_malloc]:DE0A9920 DCB 0xD [anon:libc_malloc]:DE0A9921 DCB 0x6C ; l [anon:libc_malloc]:DE0A9922 DCB 0xD8 [anon:libc_malloc]:DE0A9923 DCB 0xA5 [anon:libc_malloc]:DE0A9924 DCB 0x57 ; W [anon:libc_malloc]:DE0A9925 DCB 0xAF [anon:libc_malloc]:DE0A9926 DCB 0x7D ; } [anon:libc_malloc]:DE0A9927 DCB 0x19 [anon:libc_malloc]:DE0A9928 DCB 0xC4 [anon:libc_malloc]:DE0A9929 DCB 0x51 ; Q [anon:libc_malloc]:DE0A992A DCB 0x91 [anon:libc_malloc]:DE0A992B DCB 0xF2 [anon:libc_malloc]:DE0A992C DCB 0xDA [anon:libc_malloc]:DE0A992D DCB 0x86 [anon:libc_malloc]:DE0A992E DCB 0x57 ; W [anon:libc_malloc]:DE0A992F DCB 0x35 ; 5 [anon:libc_malloc]:DE0A9930 DCB 0x30 ; 0 [anon:libc_malloc]:DE0A9931 DCB 0x6C ; l [anon:libc_malloc]:DE0A9932 DCB 0xC3 [anon:libc_malloc]:DE0A9933 DCB 0x1D [anon:libc_malloc]:DE0A9934 DCB 6 [anon:libc_malloc]:DE0A9935 DCB 0x98 [anon:libc_malloc]:DE0A9936 DCB 0x89 [anon:libc_malloc]:DE0A9937 DCB 0x54 ; T [anon:libc_malloc]:DE0A9938 DCB 0xE9 [anon:libc_malloc]:DE0A9939 DCB 0x66 ; f [anon:libc_malloc]:DE0A993A DCB 4 [anon:libc_malloc]:DE0A993B DCB 0xE6 [anon:libc_malloc]:DE0A993C DCB 0x44 ; D [anon:libc_malloc]:DE0A993D DCB 0x6B ; k [anon:libc_malloc]:DE0A993E DCB 0x2B ; + [anon:libc_malloc]:DE0A993F DCB 0x86 [anon:libc_malloc]:DE0A9940 DCB 0x35 ; 5 [anon:libc_malloc]:DE0A9941 DCB 0x31 ; 1 [anon:libc_malloc]:DE0A9942 DCB 0xC8 [anon:libc_malloc]:DE0A9943 DCB 0xB7 [anon:libc_malloc]:DE0A9944 DCB 0xAB [anon:libc_malloc]:DE0A9945 DCB 0x68 ; h [anon:libc_malloc]:DE0A9946 DCB 0x2B ; + [anon:libc_malloc]:DE0A9947 DCB 0x24 ; $ [anon:libc_malloc]:DE0A9948 DCB 0x5A ; Z [anon:libc_malloc]:DE0A9949 DCB 0xFA [anon:libc_malloc]:DE0A994A DCB 0x7A ; z [anon:libc_malloc]:DE0A994B DCB 0xF9 [anon:libc_malloc]:DE0A994C DCB 0x11 [anon:libc_malloc]:DE0A994D DCB 0x18 [anon:libc_malloc]:DE0A994E DCB 0x1B [anon:libc_malloc]:DE0A994F DCB 0xE8 [anon:libc_malloc]:DE0A9950 DCB 0xA4 [anon:libc_malloc]:DE0A9951 DCB 0x1C [anon:libc_malloc]:DE0A9952 DCB 0x8E [anon:libc_malloc]:DE0A9953 DCB 0xDA [anon:libc_malloc]:DE0A9954 DCB 0x32 ; 2 [anon:libc_malloc]:DE0A9955 DCB 0x17 [anon:libc_malloc]:DE0A9956 DCB 0x54 ; T [anon:libc_malloc]:DE0A9957 DCB 0xAC [anon:libc_malloc]:DE0A9958 DCB 0x68 ; h [anon:libc_malloc]:DE0A9959 DCB 0x98 [anon:libc_malloc]:DE0A995A DCB 0xBC [anon:libc_malloc]:DE0A995B DCB 0xB0 [anon:libc_malloc]:DE0A995C DCB 0x45 ; E [anon:libc_malloc]:DE0A995D DCB 0x26 ; & [anon:libc_malloc]:DE0A995E DCB 0x3B ; ; [anon:libc_malloc]:DE0A995F DCB 0xF9 [anon:libc_malloc]:DE0A9960 DCB 0x40 ; @ [anon:libc_malloc]:DE0A9961 DCB 0x51 ; Q [anon:libc_malloc]:DE0A9962 DCB 0x57 ; W [anon:libc_malloc]:DE0A9963 DCB 0xA7 [anon:libc_malloc]:DE0A9964 DCB 0x9D [anon:libc_malloc]:DE0A9965 DCB 0x89 [anon:libc_malloc]:DE0A9966 DCB 0x69 ; i [anon:libc_malloc]:DE0A9967 DCB 0xE4 [anon:libc_malloc]:DE0A9968 DCB 0xD5 [anon:libc_malloc]:DE0A9969 DCB 0x77 ; w [anon:libc_malloc]:DE0A996A DCB 0x2E ; . [anon:libc_malloc]:DE0A996B DCB 0xB5 [anon:libc_malloc]:DE0A996C DCB 0x3D ; = [anon:libc_malloc]:DE0A996D DCB 0x84 [anon:libc_malloc]:DE0A996E DCB 0xB3 [anon:libc_malloc]:DE0A996F DCB 0xB4 [anon:libc_malloc]:DE0A9970 DCB 0x99 [anon:libc_malloc]:DE0A9971 DCB 0x21 ; ! [anon:libc_malloc]:DE0A9972 DCB 0xB2 [anon:libc_malloc]:DE0A9973 DCB 0xB3 [anon:libc_malloc]:DE0A9974 DCB 0xA2 [anon:libc_malloc]:DE0A9975 DCB 0x4B ; K [anon:libc_malloc]:DE0A9976 DCB 0x50 ; P [anon:libc_malloc]:DE0A9977 DCB 0x2D ; - [anon:libc_malloc]:DE0A9978 DCB 0x9F [anon:libc_malloc]:DE0A9979 DCB 0x78 ; x [anon:libc_malloc]:DE0A997A DCB 0x8A [anon:libc_malloc]:DE0A997B DCB 0x2B ; + [anon:libc_malloc]:DE0A997C DCB 0x5D ; ] [anon:libc_malloc]:DE0A997D DCB 0x82 [anon:libc_malloc]:DE0A997E DCB 0xBF [anon:libc_malloc]:DE0A997F DCB 0x6C ; l [anon:libc_malloc]:DE0A9980 DCB 0x24 ; $ [anon:libc_malloc]:DE0A9981 DCB 0x8F [anon:libc_malloc]:DE0A9982 DCB 0xF8 [anon:libc_malloc]:DE0A9983 DCB 0x53 ; S [anon:libc_malloc]:DE0A9984 DCB 0xD5 [anon:libc_malloc]:DE0A9985 DCB 0xCC [anon:libc_malloc]:DE0A9986 DCB 0x3C ; < [anon:libc_malloc]:DE0A9987 DCB 0xA0 [anon:libc_malloc]:DE0A9988 DCB 0xEA [anon:libc_malloc]:DE0A9989 DCB 0xA [anon:libc_malloc]:DE0A998A DCB 0xA6 [anon:libc_malloc]:DE0A998B DCB 0xE0 [anon:libc_malloc]:DE0A998C DCB 0x60 ; ` [anon:libc_malloc]:DE0A998D DCB 0xAD [anon:libc_malloc]:DE0A998E DCB 0xEF [anon:libc_malloc]:DE0A998F DCB 0x1B [anon:libc_malloc]:DE0A9990 DCB 0x60 ; ` [anon:libc_malloc]:DE0A9991 DCB 0x8F [anon:libc_malloc]:DE0A9992 DCB 0x51 ; Q [anon:libc_malloc]:DE0A9993 DCB 6 [anon:libc_malloc]:DE0A9994 DCB 0x82 [anon:libc_malloc]:DE0A9995 DCB 0x42 ; B [anon:libc_malloc]:DE0A9996 DCB 0x45 ; E [anon:libc_malloc]:DE0A9997 DCB 0x9E [anon:libc_malloc]:DE0A9998 DCB 0x4E ; N [anon:libc_malloc]:DE0A9999 DCB 0x1B [anon:libc_malloc]:DE0A999A DCB 0x77 ; w [anon:libc_malloc]:DE0A999B DCB 0xDA [anon:libc_malloc]:DE0A999C DCB 9 [anon:libc_malloc]:DE0A999D DCB 0xE0 [anon:libc_malloc]:DE0A999E DCB 0x2B ; + [anon:libc_malloc]:DE0A999F DCB 0x8B [anon:libc_malloc]:DE0A99A0 DCB 0x87 [anon:libc_malloc]:DE0A99A1 DCB 0x8E [anon:libc_malloc]:DE0A99A2 DCB 0x97 [anon:libc_malloc]:DE0A99A3 DCB 0xB6 [anon:libc_malloc]:DE0A99A4 DCB 0xEC [anon:libc_malloc]:DE0A99A5 DCB 0x74 ; t [anon:libc_malloc]:DE0A99A6 DCB 0x15 [anon:libc_malloc]:DE0A99A7 DCB 0xA1 [anon:libc_malloc]:DE0A99A8 DCB 0x8E [anon:libc_malloc]:DE0A99A9 DCB 0x10 [anon:libc_malloc]:DE0A99AA DCB 0x49 ; I [anon:libc_malloc]:DE0A99AB DCB 0x6D ; m [anon:libc_malloc]:DE0A99AC DCB 0x8B [anon:libc_malloc]:DE0A99AD DCB 0x16 [anon:libc_malloc]:DE0A99AE DCB 0xE [anon:libc_malloc]:DE0A99AF DCB 0xE7 [anon:libc_malloc]:DE0A99B0 DCB 0xDF [anon:libc_malloc]:DE0A99B1 DCB 0xF0 [anon:libc_malloc]:DE0A99B2 DCB 0x4F ; O [anon:libc_malloc]:DE0A99B3 DCB 0x1D [anon:libc_malloc]:DE0A99B4 DCB 0x10 [anon:libc_malloc]:DE0A99B5 DCB 0xDB [anon:libc_malloc]:DE0A99B6 DCB 0x61 ; a [anon:libc_malloc]:DE0A99B7 DCB 0xB3 [anon:libc_malloc]:DE0A99B8 DCB 0x9A [anon:libc_malloc]:DE0A99B9 DCB 0xF3 [anon:libc_malloc]:DE0A99BA DCB 0xE0 [anon:libc_malloc]:DE0A99BB DCB 0x41 ; A [anon:libc_malloc]:DE0A99BC DCB 0xB7 [anon:libc_malloc]:DE0A99BD DCB 0xE2 [anon:libc_malloc]:DE0A99BE DCB 0xBE [anon:libc_malloc]:DE0A99BF DCB 0x22 ; " [anon:libc_malloc]:DE0A99C0 DCB 0x4E ; N [anon:libc_malloc]:DE0A99C1 DCB 0xEB [anon:libc_malloc]:DE0A99C2 DCB 0x9B [anon:libc_malloc]:DE0A99C3 DCB 0x1F [anon:libc_malloc]:DE0A99C4 DCB 2 [anon:libc_malloc]:DE0A99C5 DCB 0x9E [anon:libc_malloc]:DE0A99C6 DCB 0xC4 [anon:libc_malloc]:DE0A99C7 DCB 0x97 [anon:libc_malloc]:DE0A99C8 DCB 0x40 ; @ [anon:libc_malloc]:DE0A99C9 DCB 0x94 [anon:libc_malloc]:DE0A99CA DCB 0xFC [anon:libc_malloc]:DE0A99CB DCB 0xF5 [anon:libc_malloc]:DE0A99CC DCB 0x47 ; G [anon:libc_malloc]:DE0A99CD DCB 7 [anon:libc_malloc]:DE0A99CE DCB 0x30 ; 0 [anon:libc_malloc]:DE0A99CF DCB 0x31 ; 1 [anon:libc_malloc]:DE0A99D0 DCB 0xB7 [anon:libc_malloc]:DE0A99D1 DCB 0xCC [anon:libc_malloc]:DE0A99D2 DCB 0xBC [anon:libc_malloc]:DE0A99D3 DCB 0xE1 [anon:libc_malloc]:DE0A99D4 DCB 0xB6 [anon:libc_malloc]:DE0A99D5 DCB 0xC [anon:libc_malloc]:DE0A99D6 DCB 8 [anon:libc_malloc]:DE0A99D7 DCB 0xC9 [anon:libc_malloc]:DE0A99D8 DCB 0x77 ; w [anon:libc_malloc]:DE0A99D9 DCB 0x20 [anon:libc_malloc]:DE0A99DA DCB 0xC1 [anon:libc_malloc]:DE0A99DB DCB 0xB8 [anon:libc_malloc]:DE0A99DC DCB 0x37 ; 7 [anon:libc_malloc]:DE0A99DD DCB 0x8A [anon:libc_malloc]:DE0A99DE DCB 0x94 [anon:libc_malloc]:DE0A99DF DCB 0x4A ; J [anon:libc_malloc]:DE0A99E0 DCB 0x2D ; - [anon:libc_malloc]:DE0A99E1 DCB 0x56 ; V [anon:libc_malloc]:DE0A99E2 DCB 0x7A ; z [anon:libc_malloc]:DE0A99E3 DCB 0x49 ; I [anon:libc_malloc]:DE0A99E4 DCB 0x79 ; y [anon:libc_malloc]:DE0A99E5 DCB 0x30 ; 0 [anon:libc_malloc]:DE0A99E6 DCB 3 [anon:libc_malloc]:DE0A99E7 DCB 0xB3 [anon:libc_malloc]:DE0A99E8 DCB 0x1A [anon:libc_malloc]:DE0A99E9 DCB 6 [anon:libc_malloc]:DE0A99EA DCB 0xE9 [anon:libc_malloc]:DE0A99EB DCB 0x89 [anon:libc_malloc]:DE0A99EC DCB 0xC0 [anon:libc_malloc]:DE0A99ED DCB 0xE1 [anon:libc_malloc]:DE0A99EE DCB 0xAE [anon:libc_malloc]:DE0A99EF DCB 0x66 ; f [anon:libc_malloc]:DE0A99F0 DCB 0xAD [anon:libc_malloc]:DE0A99F1 DCB 0x20 [anon:libc_malloc]:DE0A99F2 DCB 0xA8 [anon:libc_malloc]:DE0A99F3 DCB 0xD2 [anon:libc_malloc]:DE0A99F4 DCB 0x58 ; X [anon:libc_malloc]:DE0A99F5 DCB 0x76 ; v [anon:libc_malloc]:DE0A99F6 DCB 0xE7 [anon:libc_malloc]:DE0A99F7 DCB 0xB3 [anon:libc_malloc]:DE0A99F8 DCB 0x57 ; W [anon:libc_malloc]:DE0A99F9 DCB 0xC4 [anon:libc_malloc]:DE0A99FA DCB 0xE [anon:libc_malloc]:DE0A99FB DCB 0xAF [anon:libc_malloc]:DE0A99FC DCB 0xE5 [anon:libc_malloc]:DE0A99FD DCB 0xA3 [anon:libc_malloc]:DE0A99FE DCB 0x65 ; e [anon:libc_malloc]:DE0A99FF DCB 0xAE 中间地址 FFAA1A85 开始生成结果 EC965AA8 [anon:libc_malloc]:EC965AA8 DCB 0x2B ; + [anon:libc_malloc]:EC965AA9 DCB 0x78 ; x [anon:libc_malloc]:EC965AAA DCB 0x4C ; L [anon:libc_malloc]:EC965AAB DCB 0x66 ; f [anon:libc_malloc]:EC965AAC DCB 0x32 ; 2 [anon:libc_malloc]:EC965AAD DCB 0x64 ; d [anon:libc_malloc]:EC965AAE DCB 0x2B ; + [anon:libc_malloc]:EC965AAF DCB 0x7A ; z [anon:libc_malloc]:EC965AB0 DCB 0x6E ; n [anon:libc_malloc]:EC965AB1 DCB 0x55 ; U [anon:libc_malloc]:EC965AB2 DCB 0x54 ; T [anon:libc_malloc]:EC965AB3 DCB 0x31 ; 1 [anon:libc_malloc]:EC965AB4 DCB 0x68 ; h [anon:libc_malloc]:EC965AB5 DCB 0x79 ; y [anon:libc_malloc]:EC965AB6 DCB 0x39 ; 9 [anon:libc_malloc]:EC965AB7 DCB 0x54 ; T [anon:libc_malloc]:EC965AB8 DCB 0x37 ; 7 [anon:libc_malloc]:EC965AB9 DCB 0x70 ; p [anon:libc_malloc]:EC965ABA DCB 0x79 ; y [anon:libc_malloc]:EC965ABB DCB 0x39 ; 9 [anon:libc_malloc]:EC965ABC DCB 0x59 ; Y [anon:libc_malloc]:EC965ABD DCB 0x6A ; j [anon:libc_malloc]:EC965ABE DCB 0x4D ; M [anon:libc_malloc]:EC965ABF DCB 0x53 ; S [anon:libc_malloc]:EC965AC0 DCB 0x74 ; t [anon:libc_malloc]:EC965AC1 DCB 0x4E ; N [anon:libc_malloc]:EC965AC2 DCB 0x32 ; 2 [anon:libc_malloc]:EC965AC3 DCB 0x63 ; c [anon:libc_malloc]:EC965AC4 DCB 0x7A ; z [anon:libc_malloc]:EC965AC5 DCB 0x55 ; U [anon:libc_malloc]:EC965AC6 DCB 0x63 ; c [anon:libc_malloc]:EC965AC7 DCB 0x4B ; K [anon:libc_malloc]:EC965AC8 DCB 0x30 ; 0 [stack]:FFAA17E4 DCB 0xA8 [stack]:FFAA17E5 DCB 0x5A ; Z [stack]:FFAA17E6 DCB 0x96 [stack]:FFAA17E7 DCB 0xEC [stack]:FFAA17E8 DCB 0x6C ; l [stack]:FFAA17E9 DCB 0x10 [stack]:FFAA17EA DCB 0xE5 [stack]:FFAA17EB DCB 0xE8 [stack]:FFAA17EC DCB 0xBC [stack]:FFAA17ED DCB 0x54 ; T [stack]:FFAA17EE DCB 0x1A [stack]:FFAA17EF DCB 0x38 ; 8 [stack]:FFAA17F0 DCB 0xC5 [stack]:FFAA17F1 DCB 0x5C ; \ [stack]:FFAA17F2 DCB 0x38 ; 8 [stack]:FFAA17F3 DCB 0x4A ; J [stack]:FFAA17F4 DCB 0x89 [stack]:FFAA17F5 DCB 0x84 [stack]:FFAA17F6 DCB 0x43 ; C [stack]:FFAA17F7 DCB 0x6C ; l [stack]:FFAA17F8 DCB 0xBB [stack]:FFAA17F9 DCB 0x6C ; l [stack]:FFAA17FA DCB 0xDF [stack]:FFAA17FB DCB 0x87 [stack]:FFAA17FC DCB 0x42 ; B [stack]:FFAA17FD DCB 0x2F ; / [stack]:FFAA17FE DCB 0xBC [stack]:FFAA17FF DCB 0xBB [stack]:FFAA1800 DCB 0x5C ; \
地址FFAA183C 存放了0x25,观察用来做什么
[stack]:FFAA16F4 DCB 0x6C ; l [stack]:FFAA16F5 DCB 0x80 [stack]:FFAA16F6 DCB 0xF1 [stack]:FFAA16F7 DCB 0xE8 [stack]:FFAA165C DCB 0xF4 [stack]:FFAA165D DCB 0x16 [stack]:FFAA165E DCB 0xAA [stack]:FFAA165F DCB 0xFF [stack]:FFAA1B0C DCB 0x63 ; c 指向包名 FFAA1AE0 DCB 0x63 ; c 指向包名生成的BuildConfig
伪代码逻辑如下:
R6变成67,跳转sub_E8F0D182
R6=R4+R5
R6=R6-1
R5=R6-R5
R5=R5*R4
合成R5=((R6-1)-R5)*R4
R4=R4+0xE
R4=R4^R5
R4=R4^R0
R4=R4&R5
合成R4=(R4+0xE)^R5^R0&R5
R0=R0^R1
R5=(R5&R1)|(R0^R1)
R2=R2^R0
R0=0xD
R0=!R0
[stack]:FFAA1AB8 DCB 0x4A ; J
0x4A 0x77 0x56
开始设置固定字符串?发现初始化固定的16个字符串了 J wV2XBY8JwiQRfTy0 MFRkY0
BuildConfig算法
(0xA-(~(0x4<<4)+1)).ToString("X2")
得到字符串:Um5cY0RW
在生成字符串 J( 不算)dXJHMGk4Um5CY0RWaEpmTA后,具体逻辑后面再研究,好像都是固定生成这个,开始调用JNI。
注意关键指针:0xF4873914是指向_ZN3artL21gCheckNativeInterfaceE,是要操作JNI
_ZN3art8CheckJNI21ReleaseStringUTFCharsEP7_JNIEnvP8_jstringPKc
art::CheckJNI::ReleaseStringUTFChars
每次取4个字符,每个字符hex都走一遍这个逻辑,加入_ctype来判断走不同逻辑
libumejni.so:E8F12CD0 LDR R0, =0x698 libumejni.so:E8F12CD2 ADD R0, SP libumejni.so:E8F12CD4 LDR R0, [R0] ; R0=0x8C libumejni.so:E8F12CD6 ADDS R0, #0x73 ; 0x8C+0x73=0xFF libumejni.so:E8F12CD8 MOVS R3, #7 libumejni.so:E8F12CDA EORS R3, R0 ; 7^0xFF=F8 libumejni.so:E8F12CDC LDR R4, =0x69C libumejni.so:E8F12CDE ADD R4, SP libumejni.so:E8F12CE0 LDR R4, [R4] ; FFFFFFF1 libumejni.so:E8F12CE2 ADDS R4, #0xE ; FFFFFFF1+0xE=FFFFFFFF libumejni.so:E8F12CE4 EORS R4, R1 ; R4=R4^R1=FFFFFF9B libumejni.so:E8F12CE6 MOVS R2, #0xFF libumejni.so:E8F12CE8 EORS R4, R2 ; R4=R4^R2=((0x64^0xFFFFFFFF)^0xFF)=FFFFFF64 libumejni.so:E8F12CEA ANDS R4, R1 ; R4=R4&R1=0x64 libumejni.so:E8F12CEC LDR R1, [SP,#arg_8] libumejni.so:E8F12CEE LDR R1, [R1] ; R1=取出_ctype=0;_ctype是个固定结构,取出_ctype的地址,然后+上hex偏移指向的地址,然后索引+1的值取出来作为R1,之前还纳闷,以为总是个固定的0x42. libumejni.so:E8F12CF0 ADDS R1, R1, R4 ; R1=R1+R4=0x42好像是地址相加 libumejni.so:E8F12CF2 LDRB R1, [R1,#1] ; R1=R1[1]个值0x42 libumejni.so:E8F12CF4 EORS R1, R0 ; R1=R1^R0=x042^0xFF=0xBD libumejni.so:E8F12CF6 ORRS R1, R3 ; R1=R1|R3=0xBD|0xF8=0xFD libumejni.so:E8F12CF8 EORS R1, R0 ; R1=R1^R0=0xFD^0xFF=0x2 libumejni.so:E8F12CFA MOVS R3, #0x2A ; R3=0x2A libumejni.so:E8F12CFC ORRS R3, R0 ; R3=R3^R0=0x2A^0xFF=0xFF libumejni.so:E8F12CFE ANDS R3, R1 ; R3=R3&R1=0xFF&0x2=0x2 libumejni.so:E8F12D00 ANDS R3, R2 ; R3=R3&R2=0xFF&0x2=0x2
用到的base64字符集:
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
下面是每4个字符遍历base64对应转出的新hex,即遍历次数
dXJH MGk4 Um5C Y0RW aEpm TA(注意这里就剩下2个字符了,要观察下逻辑了,经过一轮跟踪发现不够4个字符就进行补0,就得到54 41 0 0)
d X J H M G k 4 U m 5 C Y 0 R W a E p m T A
64 58 4A 48 4D 47 6B 34 55 6D 35 43 59 30 52 57 61 45 70 6D 54 41 0 0
23 17 09 07 0C 06 2A F3 14 2C F4 02 18 EF 11 16 错误的相减得出的hex
1D 17 09 07 0C 06 24 34 14 26 39 02 18 34 11 16 1A 04 29 26
通过之前的长字符串,遍历4次跑出dXJH后,开始进入新逻辑,定位到字符串Uf7TV,指向f。跟踪发现,这只不过是一个指针而已.用来给R1做182上的逻辑判断。
循环dXJH,内部总的循环64次,去base64字符串里面找是否存在这个hex,找到后走逻辑(不详)。
终于找到新的hex值,就是循环的次数,因为是在base64从开头41找到dXJH的hex,遍历了这么多次,也就是相当于两个hex相减(好像不完全对)【补充新发现,不是两个Hex相减,因为ascii表里面 A-Z和a-z直接还有几个字符0x5B-0x60,所以如果硬要相减就还要再减掉6,但是依然不对,因为后面还有两个字符+/的hex是小的,所以一定是遍历i++的值,如果hex的值小于0x41则直接放进来?】,把这个值替换到对应的dXJH的hex中,最终得到0x1D 0x17 0x9 0x7,发现对于本身hex小于A(0x41)的字符,需要循环到A-Z0./最后。然后的逻辑还需要跟踪。
用新算出的Hex进行操作
MGk4得到0xC 0x6 0x24 0x34
[stack]:FFAA1A9C DCB 0xC [stack]:FFAA1A9D DCB 6 [stack]:FFAA1A9E DCB 0x24 ; $ [stack]:FFAA1A9F DCB 0x34 ; 4 [stack]:FFAA1AA0 DCB 0x75 ; u [stack]:FFAA1AA1 DCB 0x72 ; r [stack]:FFAA1AA2 DCB 0x47 ; G [stack]:FFAA1AA0 DCB 0x52 ; R [stack]:FFAA1AA1 DCB 0x6E ; n [stack]:FFAA1AA2 DCB 0x42 ; B [anon:libc_malloc]:E7E66729 DCB 0x63 ; c [anon:libc_malloc]:E7E6672A DCB 0x44 ; D [anon:libc_malloc]:E7E6672B DCB 0x56 ; V [stack]:FFAA1AA0 DCB 0x68 ; h [stack]:FFAA1AA1 DCB 0x4A ; J [stack]:FFAA1AA2 DCB 0x66 ; f [stack]:FFAA1AA0 DCB 0x4C ; L [stack]:FFAA1AA1 DCB 0 [stack]:FFAA1AA2 DCB 0
感觉是16个字符循环,每次取4个字符,计算后生成3个字符(之前跟踪到的是urG 0i8 RnB cDV)
dXJH得到urG
MGk4得到0i8
Um5C得到RnB
Y0RW得到cDV
aEpm得到hjf
TA补0得到L
两个补0 遍历都可以F9,直到最后一个补0的0x3F,hex << 2 左移两位,用新生成的4个hex,来生成3个hex的整体逻辑。
libumejni.so:E8F148FC libumejni.so:E8F148FC libumejni.so:E8F148FC libumejni.so:E8F148FC sub_E8F148FC libumejni.so:E8F148FC libumejni.so:E8F148FC varg_r3= -4 libumejni.so:E8F148FC libumejni.so:E8F148FC LDR R2, =0x69C libumejni.so:E8F148FE ADD R2, SP libumejni.so:E8F14900 LDR R2, [R2] libumejni.so:E8F14902 ADDS R2, #0xE libumejni.so:E8F14904 LDR R6, =0x688 libumejni.so:E8F14906 ADD R6, SP libumejni.so:E8F14908 STR R2, [R6] ; 将FFFFFFFF存到一个变量中了 libumejni.so:E8F1490A LDR R5, =0xF7913433 libumejni.so:E8F1490C EORS R5, R2 libumejni.so:E8F1490E LDR R1, =0x924 libumejni.so:E8F14910 ADD R1, SP ; 指向新生成的4个hex 1D 17 9 7 libumejni.so:E8F14912 LDRB R0, [R1] libumejni.so:E8F14914 LDR R6, =0x644 libumejni.so:E8F14916 ADD R6, SP libumejni.so:E8F14918 STR R1, [R6] ; 将新hex的指针给到另一个变量 libumejni.so:E8F1491A LSLS R3, R0, #2 ; 将hex第一个值左移2位 0x1D<<2=0x74 libumejni.so:E8F1491C PUSH {R3} libumejni.so:E8F1491E POP {R0} libumejni.so:E8F14920 ANDS R0, R5 ; R0=R0&R5=0x74&0x086ECBCC=0x44 libumejni.so:E8F14922 EORS R3, R2 ; R3=R3^R2=0x74^0xFFFFFFFF=0xFFFFFF8B libumejni.so:E8F14924 MOVS R2, #0x33 ; R2=0x33 libumejni.so:E8F14926 LDR R6, =0x4C8 libumejni.so:E8F14928 ADD R6, SP libumejni.so:E8F1492A STR R2, [R6] ; 将R2的0x33放到R6中0 0 0 0x33 libumejni.so:E8F1492C PUSH {R3} libumejni.so:E8F1492E POP {R4} libumejni.so:E8F14930 ANDS R4, R2 ; R4=R4&R2=0xFFFFFF8B&0x33=0x3 libumejni.so:E8F14932 ORRS R4, R0 ; R4=R4|R0=0x3|0x44=0x47 libumejni.so:E8F14934 LDR R0, =0x698 libumejni.so:E8F14936 ADD R0, SP libumejni.so:E8F14938 LDR R0, [R0] ; 固定值0x8C libumejni.so:E8F1493A ADDS R0, #0x73 ; R0=0x8C+0x73=0xFF libumejni.so:E8F1493C LDR R6, =0x4BC libumejni.so:E8F1493E ADD R6, SP libumejni.so:E8F14940 STR R0, [R6] ; 将0xFF放到一个变量指针 libumejni.so:E8F14942 LDRB R2, [R1,#1] ; 取出hex的第二个值R2=0x17 libumejni.so:E8F14944 LDR R6, =0x4B8 libumejni.so:E8F14946 ADD R6, SP libumejni.so:E8F14948 STR R2, [R6] ; 将hex第二个R2=0x17放到另一个地方 libumejni.so:E8F1494A PUSH {R2} libumejni.so:E8F1494C POP {R1} libumejni.so:E8F1494E EORS R1, R0 ; R1=R1^R0=0x17^0xFF=0xE8 libumejni.so:E8F14950 MOVS R0, #0x30 ; R0=0x30 libumejni.so:E8F14952 EORS R0, R1 ; R0=R0^R1=0x30^0xE8=0xD8 libumejni.so:E8F14954 ANDS R0, R2 ; R0=R0&R2(hex)=0xD8&0x17=0x10 libumejni.so:E8F14956 MOVS R1, #0xFF ; R1=0xFF固定值,有点0x8C+0x73的意思 libumejni.so:E8F14958 LDR R6, =0x4C4 libumejni.so:E8F1495A ADD R6, SP libumejni.so:E8F1495C STR R1, [R6] ; 将FF放到另一个地址 libumejni.so:E8F1495E ANDS R0, R1 ; R0=R0&R1=0x10&0xFF=0x10 libumejni.so:E8F14960 LSRS R0, R0, #4 ; R0=R0>>4=0x10>>4=0x1右移4位 libumejni.so:E8F14962 PUSH {R0} libumejni.so:E8F14964 POP {R2} libumejni.so:E8F14966 ANDS R2, R5 ; R2=R2&R5=0x1&0x086ECBCC=0 libumejni.so:E8F14968 LDR R1, =0x688 libumejni.so:E8F1496A ADD R1, SP libumejni.so:E8F1496C LDR R1, [R1] ; R1=0xFFFFFFFF不知道是不是固定值 libumejni.so:E8F1496E EORS R0, R1 ; R0=R0^R1=0x1^FFFFFFFF=0xFFFFFFFE libumejni.so:E8F14970 PUSH {R0} libumejni.so:E8F14972 POP {R1} libumejni.so:E8F14974 LDR R6, =0x4C8 libumejni.so:E8F14976 ADD R6, SP libumejni.so:E8F14978 LDR R6, [R6] ; R6=取出上面第一个计算出的值0x33 libumejni.so:E8F1497A ANDS R1, R6 ; R1=R1&R6=0x33&0xFFFFFFFE=0x32 libumejni.so:E8F1497C ORRS R1, R2 ; R1=R1|R2=0x32|0x0=0x32 libumejni.so:E8F1497E EORS R1, R4 ; R1=R1^R4(上面的值)=0x32^0x47=0x75 libumejni.so:E8F14980 ORRS R0, R3 ; R0=R0|R3=0xFFFFFFFE|0xFFFFFF8B=0xFFFFFFFF libumejni.so:E8F14982 LDR R3, =0x688 libumejni.so:E8F14984 ADD R3, SP libumejni.so:E8F14986 LDR R3, [R3] ; R3=再次取出固定值0xFFFFFFFF libumejni.so:E8F14988 EORS R0, R3 ; R0=R0^R3=0xFFFFFFFF^0xFFFFFFFF=0 libumejni.so:E8F1498A LDR R2, =0x4C8 libumejni.so:E8F1498C ADD R2, SP libumejni.so:E8F1498E LDR R2, [R2] ; R2=上面第一个计算出的值0x33 libumejni.so:E8F14990 ORRS R5, R2 ; R5=R5|R2=0x086ECBCC|0x33=0x86ECBFF libumejni.so:E8F14992 ANDS R5, R0 ; R5=R5&R0=0x86ECBFF&0=0x0 libumejni.so:E8F14994 ORRS R5, R1 ; R5=R5|R1(上面的)=0x0|0x75=0x75 libumejni.so:E8F14996 LDR R0, =0x928 libumejni.so:E8F14998 ADD R0, SP libumejni.so:E8F1499A LDR R4, =0x4C0 libumejni.so:E8F1499C ADD R4, SP libumejni.so:E8F1499E STR R0, [R4] ; 新分配了一个变量存R0的指针 libumejni.so:E8F149A0 STRB R5, [R0] ; 将R5=0x75存起来R0的地址,存成新hex的第一个 libumejni.so:E8F149A2 LDR R5, =0x6361A15A libumejni.so:E8F149A4 EORS R5, R3 ; R5=R5^R3=0x6361A15A^0xFFFFFFFF=0x9C9E5EA5 libumejni.so:E8F149A6 LDR R0, =0x4B8 libumejni.so:E8F149A8 ADD R0, SP libumejni.so:E8F149AA LDR R0, [R0] ; R0=0x17,取出第二个hex libumejni.so:E8F149AC LSLS R0, R0, #4 ; R0=R0<<4=0x17<<4=0x170 libumejni.so:E8F149AE MOVS R1, #0xF0 ; R1=0xF0固定值 libumejni.so:E8F149B0 ANDS R1, R0 ; R1=R1&R0=0x170&0xF0=0x70 libumejni.so:E8F149B2 PUSH {R1} libumejni.so:E8F149B4 POP {R2} libumejni.so:E8F149B6 ANDS R2, R5 ; R2=R2&R5=0x70&0x9C9E5EA5=0x20 libumejni.so:E8F149B8 EORS R1, R3 ; R1=R1^R3=0x70^0xFFFFFFFF=0xFFFFFF8F libumejni.so:E8F149BA MOVS R0, #0x5A ; R0=0x5A固定值 libumejni.so:E8F149BC LDR R4, =0x4C8 libumejni.so:E8F149BE ADD R4, SP libumejni.so:E8F149C0 STR R0, [R4] ; 将之前存第一个0x33的变量存成第二计算出的0x5A libumejni.so:E8F149C2 PUSH {R1} libumejni.so:E8F149C4 POP {R3} libumejni.so:E8F149C6 ANDS R3, R0 ; R3=R3(上面的)&R0=0xFFFFFF8F&0x5A=0xA libumejni.so:E8F149C8 ORRS R3, R2 ; R3=R3|R2=0xA|0x20=0x2A 都是上面的值 libumejni.so:E8F149CA LDR R0, =0x644 libumejni.so:E8F149CC ADD R0, SP libumejni.so:E8F149CE LDR R0, [R0] libumejni.so:E8F149D0 LDRB R0, [R0,#2] ; R0=取出第三个hex值0x9 libumejni.so:E8F149D2 LDR R4, =0x4B8 libumejni.so:E8F149D4 ADD R4, SP libumejni.so:E8F149D6 STR R0, [R4] ; 应该是一个变量根据操作存不同的hex值,0x9 libumejni.so:E8F149D8 LDR R6, =0x4BC libumejni.so:E8F149DA ADD R6, SP libumejni.so:E8F149DC LDR R6, [R6] ; R6=0xFF固定值 libumejni.so:E8F149DE EORS R6, R0 ; R6=R6^R0=0xFF^0x9=0xF6 libumejni.so:E8F149E0 MOVS R2, #0x3C ; R2=0x3C固定值 libumejni.so:E8F149E2 EORS R2, R6 ; R2=R2^R6=0x3C^0xF6=0xCA libumejni.so:E8F149E4 ANDS R2, R0 ; R2=R2&R0=0xCA&0x9=0x9 libumejni.so:E8F149E6 LDR R0, =0x4C4 libumejni.so:E8F149E8 ADD R0, SP libumejni.so:E8F149EA LDR R0, [R0] ; R0=0xFF固定值(上面存放的) libumejni.so:E8F149EC ANDS R2, R0 ; R2=R2&R0=0x8&0xFF=0x8 libumejni.so:E8F149EE LSRS R6, R2, #2 ; R6=R2>>2=0x8>>2=0x2右移2位 libumejni.so:E8F149F0 PUSH {R6} libumejni.so:E8F149F2 POP {R2} libumejni.so:E8F149F4 ANDS R2, R5 ; R2=R2&R5=0x2&0x9C9E5EA5=0x0 libumejni.so:E8F149F6 LDR R0, =0x688 libumejni.so:E8F149F8 ADD R0, SP libumejni.so:E8F149FA LDR R0, [R0] ; R0=取出固定的0xFFFFFFFF? libumejni.so:E8F149FC EORS R6, R0 ; R6=R6^R0=0x2^0xFFFFFFFF=0xFFFFFFFD libumejni.so:E8F149FE PUSH {R6} libumejni.so:E8F14A00 POP {R0} libumejni.so:E8F14A02 LDR R4, =0x4C8 libumejni.so:E8F14A04 ADD R4, SP libumejni.so:E8F14A06 LDR R4, [R4] ; R4=0x5A取出之前的第二个hex计算的数据 libumejni.so:E8F14A08 ANDS R0, R4 ; R0=R0&R4=0xFFFFFFFD&0x5A=0x58 libumejni.so:E8F14A0A ORRS R0, R2 ; R0=R0|R2=0x58|0x0=0x58 libumejni.so:E8F14A0C EORS R0, R3 ; R0=R0^R3=0x58^0x2A=0x72 libumejni.so:E8F14A0E ORRS R6, R1 ; R6=R6|R1=0xFFFFFFFD|0xFFFFFF8F=0xFFFFFFFF libumejni.so:E8F14A10 LDR R1, =0x688 libumejni.so:E8F14A12 ADD R1, SP libumejni.so:E8F14A14 LDR R1, [R1] ; R1=0xFFFFFFFF固定值 libumejni.so:E8F14A16 EORS R6, R1 ; R6=R6^R1=0xFFFFFFFF^0xFFFFFFFF=0x0 libumejni.so:E8F14A18 LDR R1, =0x4C8 libumejni.so:E8F14A1A ADD R1, SP libumejni.so:E8F14A1C LDR R1, [R1] ; R1=0x5A取出之前的第二个hex计算的数据 libumejni.so:E8F14A1E ORRS R5, R1 ; R5=R5|R1=0x9C9E5EA5|0x5A=0x9C9E5EFF libumejni.so:E8F14A20 ANDS R5, R6 ; R5=R5&R6=0x9C9E5EFF&0x0=0x0 libumejni.so:E8F14A22 ORRS R5, R0 ; R5=R5|R0=0x0|0x00000072=0x72 libumejni.so:E8F14A24 LDR R2, =0x4C0 libumejni.so:E8F14A26 ADD R2, SP libumejni.so:E8F14A28 LDR R2, [R2] ; R2指向新计算的hex地址 libumejni.so:E8F14A2A STRB R5, [R2,#1] ; 将0x72存成新hex第二个 libumejni.so:E8F14A2C LDR R0, =0x4B8 libumejni.so:E8F14A2E ADD R0, SP libumejni.so:E8F14A30 LDR R0, [R0] ; R0=0x9第三个hex的值 libumejni.so:E8F14A32 LSLS R0, R0, #6 ; R0=R0<<6=0x9<<6=0x240左移6位 libumejni.so:E8F14A34 LDR R1, =0x644 libumejni.so:E8F14A36 ADD R1, SP libumejni.so:E8F14A38 LDR R1, [R1] libumejni.so:E8F14A3A LDRB R1, [R1,#3] ; R1=0x7第四个hex的值 libumejni.so:E8F14A3C NEGS R1, R1 ; R1=~R1+1=~0x7+1=0xFFFFFFF9取反+1 libumejni.so:E8F14A3E SUBS R0, R0, R1 ; R0=R0-R1=0x240-0xFFFFFFF9=0x247 libumejni.so:E8F14A40 STRB R0, [R2,#2] ; 将0x247存成新hex第三个,实际存的是0x47,转byte了 libumejni.so:E8F14A42 LDR R0, =0x844 libumejni.so:E8F14A44 ADD R0, SP libumejni.so:E8F14A46 LDR R0, [R0] ; R0=0,固定值? libumejni.so:E8F14A48 NEGS R0, R0 ; R0=~R0+1=~0x0+1=0x0 libumejni.so:E8F14A4A MOVS R1, #3 ; R1=3固定值 libumejni.so:E8F14A4C SUBS R1, R1, R0 ; R1=R1-R0=0x3-0x0=0x3 libumejni.so:E8F14A4E LDR R0, =0x848 libumejni.so:E8F14A50 ADD R0, SP libumejni.so:E8F14A52 LDR R0, [R0] ; 指向一个地址 libumejni.so:E8F14A54 BL sub_E8F1573C libumejni.so:E8F14A58 LDR R2, =0x738 libumejni.so:E8F14A5A ADD R2, SP libumejni.so:E8F14A5C STR R0, [R2] ; 存了个地址到另一个变量 libumejni.so:E8F14A5E MOVS R0, #0 ; R0=0固定值 libumejni.so:E8F14A60 LDR R2, =0x4C8 libumejni.so:E8F14A62 ADD R2, SP libumejni.so:E8F14A64 STR R0, [R2] ; 存地址,初始化一个变量吧好像 libumejni.so:E8F14A66 LDR R0, =0x844 libumejni.so:E8F14A68 ADD R0, SP libumejni.so:E8F14A6A LDR R0, [R0] libumejni.so:E8F14A6C LDR R2, =0x4C4 libumejni.so:E8F14A6E ADD R2, SP libumejni.so:E8F14A70 STR R0, [R2] libumejni.so:E8F14A70 ; End of function sub_E8F148FC libumejni.so:E8F14A70
4转3逻辑完成后,但未拷贝补0的,发现调用了llvm::Pass * llvm::callDefaultCtor(void)+2 在libGLES_mali.so。
4转3总结果如下:
[anon:libc_malloc]:E7E7FDD0 DCB 0x75 ; u [anon:libc_malloc]:E7E7FDD1 DCB 0x72 ; r [anon:libc_malloc]:E7E7FDD2 DCB 0x47 ; G [anon:libc_malloc]:E7E7FDD3 DCB 0x30 ; 0 [anon:libc_malloc]:E7E7FDD4 DCB 0x69 ; i [anon:libc_malloc]:E7E7FDD5 DCB 0x38 ; 8 [anon:libc_malloc]:E7E7FDD6 DCB 0x52 ; R [anon:libc_malloc]:E7E7FDD7 DCB 0x6E ; n [anon:libc_malloc]:E7E7FDD8 DCB 0x42 ; B [anon:libc_malloc]:E7E7FDD9 DCB 0x63 ; c [anon:libc_malloc]:E7E7FDDA DCB 0x44 ; D [anon:libc_malloc]:E7E7FDDB DCB 0x56 ; V [anon:libc_malloc]:E7E7FDDC DCB 0x68 ; h [anon:libc_malloc]:E7E7FDDD DCB 0x4A ; J [anon:libc_malloc]:E7E7FDDE DCB 0x66 ; f [anon:libc_malloc]:E7E7FDDF DCB 0x4C ; L
几个逻辑后发现有调用_ZN3art11GuardedCopy7kCanaryE,接着是GetStringUTFChars,可能是要获取明文数据了吧。
BLX R3就发现,出现密文数据了,太诡异了,是不是这个加载的结果其实是个中间数据。
[anon:libc_malloc]:DE099100 DCB 0x2B ; + [anon:libc_malloc]:DE099101 DCB 0x78 ; x [anon:libc_malloc]:DE099102 DCB 0x4C ; L [anon:libc_malloc]:DE099103 DCB 0x66 ; f [anon:libc_malloc]:DE099104 DCB 0x32 ; 2
接着看到MTK_TIME_PROFILE_STOP的调用,什么玩意啊
继续调试,发现开始操作密文字符串,取第一个字节0x2B。
重大发现,生成的密文长度跟它的密文长度是一样的,说明算法应该是差不多的,只是中间计算的数据可能有问题。
应该还是按照base64的基础逻辑来,3个字节变4个字节。497=>684
接着发现进入一个新的base64逻辑,对应的base64是这样的,经过跟踪发现,这个逻辑是对密文不足0x2B0的长度,进行补4操作。密文长度是0x2AC。
libumejni.so:E8F15E8D unk_E8F15E8D DCB 0x10 ; DATA XREF: sub_E8F10F30+FC0↑o libumejni.so:E8F15E8D ; libumejni.so:off_E8F120F0↑o ... libumejni.so:E8F15E8E DCB 1 libumejni.so:E8F15E8F DCB 2 libumejni.so:E8F15E90 DCB 3 libumejni.so:E8F15E91 DCB 4 libumejni.so:E8F15E92 DCB 5 libumejni.so:E8F15E93 DCB 6 libumejni.so:E8F15E94 DCB 7 libumejni.so:E8F15E95 DCB 8 libumejni.so:E8F15E96 DCB 9 libumejni.so:E8F15E97 DCB 0xA libumejni.so:E8F15E98 DCB 0xB libumejni.so:E8F15E99 DCB 0xC libumejni.so:E8F15E9A DCB 0xD libumejni.so:E8F15E9B DCB 0xE libumejni.so:E8F15E9C DCB 0xF libumejni.so:E8F15E9D DCB 0x41 ; A libumejni.so:E8F15E9E DCB 0x42 ; B libumejni.so:E8F15E9F DCB 0x43 ; C libumejni.so:E8F15EA0 DCB 0x44 ; D libumejni.so:E8F15EA1 DCB 0x45 ; E libumejni.so:E8F15EA2 DCB 0x46 ; F libumejni.so:E8F15EA3 DCB 0x47 ; G libumejni.so:E8F15EA4 DCB 0x48 ; H libumejni.so:E8F15EA5 DCB 0x49 ; I libumejni.so:E8F15EA6 DCB 0x4A ; J libumejni.so:E8F15EA7 DCB 0x4B ; K libumejni.so:E8F15EA8 DCB 0x4C ; L libumejni.so:E8F15EA9 DCB 0x4D ; M libumejni.so:E8F15EAA DCB 0x4E ; N libumejni.so:E8F15EAB DCB 0x4F ; O libumejni.so:E8F15EAC DCB 0x50 ; P libumejni.so:E8F15EAD DCB 0x51 ; Q libumejni.so:E8F15EAE DCB 0x52 ; R libumejni.so:E8F15EAF DCB 0x53 ; S libumejni.so:E8F15EB0 DCB 0x54 ; T libumejni.so:E8F15EB1 DCB 0x55 ; U libumejni.so:E8F15EB2 DCB 0x56 ; V libumejni.so:E8F15EB3 DCB 0x57 ; W libumejni.so:E8F15EB4 DCB 0x58 ; X libumejni.so:E8F15EB5 DCB 0x59 ; Y libumejni.so:E8F15EB6 DCB 0x5A ; Z libumejni.so:E8F15EB7 DCB 0x61 ; a libumejni.so:E8F15EB8 DCB 0x62 ; b libumejni.so:E8F15EB9 DCB 0x63 ; c libumejni.so:E8F15EBA DCB 0x64 ; d libumejni.so:E8F15EBB DCB 0x65 ; e libumejni.so:E8F15EBC DCB 0x66 ; f libumejni.so:E8F15EBD DCB 0x67 ; g libumejni.so:E8F15EBE DCB 0x68 ; h libumejni.so:E8F15EBF DCB 0x69 ; i libumejni.so:E8F15EC0 DCB 0x6A ; j libumejni.so:E8F15EC1 DCB 0x6B ; k libumejni.so:E8F15EC2 DCB 0x6C ; l libumejni.so:E8F15EC3 DCB 0x6D ; m libumejni.so:E8F15EC4 DCB 0x6E ; n libumejni.so:E8F15EC5 DCB 0x6F ; o libumejni.so:E8F15EC6 DCB 0x70 ; p libumejni.so:E8F15EC7 DCB 0x71 ; q libumejni.so:E8F15EC8 DCB 0x72 ; r libumejni.so:E8F15EC9 DCB 0x73 ; s libumejni.so:E8F15ECA DCB 0x74 ; t libumejni.so:E8F15ECB DCB 0x75 ; u libumejni.so:E8F15ECC DCB 0x76 ; v libumejni.so:E8F15ECD DCB 0x77 ; w libumejni.so:E8F15ECE DCB 0x78 ; x libumejni.so:E8F15ECF DCB 0x79 ; y libumejni.so:E8F15ED0 DCB 0x7A ; z libumejni.so:E8F15ED1 DCB 0x30 ; 0 libumejni.so:E8F15ED2 DCB 0x31 ; 1 libumejni.so:E8F15ED3 DCB 0x32 ; 2 libumejni.so:E8F15ED4 DCB 0x33 ; 3 libumejni.so:E8F15ED5 DCB 0x34 ; 4 libumejni.so:E8F15ED6 DCB 0x35 ; 5 libumejni.so:E8F15ED7 DCB 0x36 ; 6 libumejni.so:E8F15ED8 DCB 0x37 ; 7 libumejni.so:E8F15ED9 DCB 0x38 ; 8 libumejni.so:E8F15EDA DCB 0x39 ; 9 libumejni.so:E8F15EDB DCB 0x2B ; + libumejni.so:E8F15EDC DCB 0x2F ; /
重大发现,之前生成的密文,通过这个字符集进行签名一样的感觉,总的字符长度44
接着进入另一个字符集逻辑c|w{,每次取密文16个字节进入该逻辑,再跟踪看
[stack]:FFAA1A98 DCB 0x68 ; h [stack]:FFAA1A99 DCB 0x4A ; J [stack]:FFAA1A9A DCB 0x66 ; f [stack]:FFAA1A9B DCB 0x4C ; L [stack]:FFAA1A98 DCB 0xD7 [stack]:FFAA1A99 DCB 0x33 ; 3 [stack]:FFAA1A9A DCB 0x29 ; ) [stack]:FFAA1A9B DCB 0x45 ; E [stack]:FFAA1A98 DCB 0x51 ; Q [stack]:FFAA1A99 DCB 0x72 ; r [stack]:FFAA1A9A DCB 0x7C ; | [stack]:FFAA1A9B DCB 0xF8 libumejni.so:E8F11950 libumejni.so:E8F11950 loc_E8F11950 ; 在进入另一个编码字符集逻辑c|w{ libumejni.so:E8F11950 LDR R0, =0x920 libumejni.so:E8F11952 ADD R0, SP libumejni.so:E8F11954 LDRB R1, [R0,#2] libumejni.so:E8F11956 LDR R2, =(unk_E8F15C8E - 0xE8F1195C) libumejni.so:E8F11958 ADD R2, PC ; unk_E8F15C8E libumejni.so:E8F1195A PUSH {R2} libumejni.so:E8F1195C POP {R5} libumejni.so:E8F1195E LDRB R1, [R5,R1] ; R1=字符集的[变量] R1=chars[0x66]=0x33 libumejni.so:E8F11960 LDRB R3, [R0,#1] ; R3=0x4A R0的第二个字节 libumejni.so:E8F11962 LDRB R2, [R0] ; R2=R0第一个字节 libumejni.so:E8F11964 LDRB R4, [R0,#3] ; R4=0x4C R0的第4个字节 libumejni.so:E8F11966 STRB R1, [R0,#1] ; 将对应的字节0x33放到R0的第二个字节 libumejni.so:E8F11968 LDRB R1, [R5,R4] ; R1=字符集的0x4C=0x29 libumejni.so:E8F1196A STRB R1, [R0,#2] ; R0的第二个字节放0x29 libumejni.so:E8F1196C LDRB R1, [R5,R2] ; R1=字符集的0x68(R0的第一个字节)=0x45 libumejni.so:E8F1196E STRB R1, [R0,#3] ; 将对应的0x45放到R0的第四个字节 libumejni.so:E8F11970 LDR R2, =0x698 libumejni.so:E8F11972 ADD R2, SP libumejni.so:E8F11974 LDR R2, [R2] ; R2=0x8C固定值? libumejni.so:E8F11976 PUSH {R2} libumejni.so:E8F11978 POP {R1} libumejni.so:E8F1197A ADDS R1, #0x73 ; R1=0xFF libumejni.so:E8F1197C ADDS R2, #0x43 ; R2=0xCF libumejni.so:E8F1197E EORS R2, R1 ; R2=R2^R1=0xCF^0xFF=0x30 libumejni.so:E8F11980 LDRB R3, [R5,R3] ; R3=字符集的[0x30]=0xD6 libumejni.so:E8F11982 PUSH {R3} libumejni.so:E8F11984 POP {R4} libumejni.so:E8F11986 ANDS R4, R2 ; R4=R4&R2=0xD6&0x30=0x10 libumejni.so:E8F11988 EORS R3, R1 ; R3=R3^R1=0xD6^0xFF=0x29 libumejni.so:E8F1198A MOVS R5, #0xCF ; R5=0xCF libumejni.so:E8F1198C ANDS R3, R5 ; R3=R3&R5=0x29&0xCF=0x9 libumejni.so:E8F1198E ORRS R3, R4 ; R3=R3|R4=0x9|0x10=0x19 libumejni.so:E8F11990 LDR R4, =0x898 libumejni.so:E8F11992 ADD R4, SP libumejni.so:E8F11994 LDR R4, [R4] ; R4=0x4 libumejni.so:E8F11996 LSRS R4, R4, #2 ; R4=R4>>2=0x4>>2=1 libumejni.so:E8F11998 LDR R6, =(unk_E8F15D8E - 0xE8F1199E) libumejni.so:E8F1199A ADD R6, PC ; unk_E8F15D8E libumejni.so:E8F1199C LDRB R4, [R6,R4] ; R4=R6[R4]=1 libumejni.so:E8F1199E ANDS R2, R4 ; R2=R2&R4=0x30&0x1=0x0 libumejni.so:E8F119A0 EORS R1, R4 ; R1=R1^R4=0xFF^0x1=0xFE libumejni.so:E8F119A2 ANDS R1, R5 ; R1=R1&R5=0xFE&0xCF=0xCE libumejni.so:E8F119A4 ORRS R1, R2 ; R1=R1|R2=0xCE|0x0=0xCE libumejni.so:E8F119A6 EORS R1, R3 ; R1=R1^R3=0xCE^0x19=0xD7 libumejni.so:E8F119A8 STRB R1, [R0] libumejni.so:E8F119AA LDR R0, [SP,#arg_298] libumejni.so:E8F119AC LDR R2, [R0] libumejni.so:E8F119AE MOVS R1, #1 libumejni.so:E8F119B0 MOVS R0, #0 libumejni.so:E8F119B2 CMP R2, #0xA libumejni.so:E8F119B4 PUSH {R1} libumejni.so:E8F119B6 POP {R2} libumejni.so:E8F119B8 BLT loc_E8F119BE
非常奇怪的后续操作
发现在用urG...16字节跟什么 在其后面追加生成一个16字节数据,不清楚有什么用
可能是遍历urG...16字节,每次取4个字节
每4个字节的逻辑
libumejni.so:E8F0E47A libumejni.so:E8F0E47A loc_E8F0E47A ; 诡异的逻辑,里面这些大数字就是迷惑人,实际就是i做索引就行了 libumejni.so:E8F0E47A LDR R0, =0x898 libumejni.so:E8F0E47C ADD R0, SP libumejni.so:E8F0E47E LDR R0, [R0] ; 获取变量i=5 libumejni.so:E8F0E480 LSLS R0, R0, #2 ; R0 5<<2 左移2位=0x14 libumejni.so:E8F0E482 LDR R1, =0xB42D0A6A ; 固定值 libumejni.so:E8F0E484 ADDS R0, R0, R1 ; R0=R0+R1=0x14+0xB42D0A6A=0x0xB42D0A7E libumejni.so:E8F0E486 SUBS R0, #4 ; R0=R0-4=0xB42D0A7E-4=0xB42D0A7A libumejni.so:E8F0E488 SUBS R0, R0, R1 ; R0=0x10,i<<2 libumejni.so:E8F0E48A LDR R1, =0x6EEE98C2 libumejni.so:E8F0E48C SUBS R0, R0, R1 ; R0=R0-R1=0x10-0x6EEE98C2=0x9111674E根据i<<2 libumejni.so:E8F0E48E LDR R2, =0x89C libumejni.so:E8F0E490 ADD R2, SP libumejni.so:E8F0E492 LDR R2, [R2] ; 内部4的小变量j libumejni.so:E8F0E494 ADDS R0, R0, R2 ; R0=R0+R2=0x9111674E+0x2=0x91116750 libumejni.so:E8F0E496 LDR R2, =0x9C0 libumejni.so:E8F0E498 ADD R2, SP ; R2指向urG...地址 libumejni.so:E8F0E49A ADDS R0, R2, R0 ; R0=R2+R0=0xFFAA1B38+0x91116750=0x90BB8288 libumejni.so:E8F0E49C LDRB R0, [R0,R1] ; 取出urG...后面第i个字节,上次=0x6E(是大变量i) libumejni.so:E8F0E49E LDR R1, =0x920 libumejni.so:E8F0E4A0 ADD R1, SP ; R1指向新4字节 libumejni.so:E8F0E4A2 LDR R2, =0x89C libumejni.so:E8F0E4A4 ADD R2, SP libumejni.so:E8F0E4A6 LDR R2, [R2] ; R2=0 libumejni.so:E8F0E4A8 STRB R0, [R1,R2] ; urG[小变量j]字节=urG[大变量j] libumejni.so:E8F0E4AA LDR R0, =0x89C ; 第二次变成了赋值第二个字节,应该是根据i对应起来 libumejni.so:E8F0E4AC ADD R0, SP libumejni.so:E8F0E4AE LDR R0, [R0] ; 获取j小变量 libumejni.so:E8F0E4B0 ADDS R0, #1 ; 小变量j++ libumejni.so:E8F0E4B2 LDR R3, =0x7A0 libumejni.so:E8F0E4B4 ADD R3, SP libumejni.so:E8F0E4B6 STR R0, [R3] ; 每4个变量i++ libumejni.so:E8F0E4B8 LDR R0, [SP,#arg_68] libumejni.so:E8F0E4BA LDR R1, [R0] libumejni.so:E8F0E4BC CMP R1, #0xA libumejni.so:E8F0E4BE LDR R2, =0x6A0 libumejni.so:E8F0E4C0 ADD R2, SP ; 好像不对,要再观察下逻辑 libumejni.so:E8F0E4C2 LDR R2, [R2] libumejni.so:E8F0E4C4 BLT loc_E8F0E4C8
取完4个字节后计算新四个字节的逻辑代码
libumejni.so:E8F0D74E libumejni.so:E8F0D74E loc_E8F0D74E ; 使用urG...和之前新4字节,生成新的4字节和urG后面3个字节 libumejni.so:E8F0D74E LDR R4, =0x698 libumejni.so:E8F0D750 ADD R4, SP libumejni.so:E8F0D752 LDR R4, [R4] ; R4=0x8C固定值 libumejni.so:E8F0D754 PUSH {R4} libumejni.so:E8F0D756 POP {R1} libumejni.so:E8F0D758 ADDS R1, #0x73 ; R1=0xFF 上面相加无意义 libumejni.so:E8F0D75A LDR R0, =0x898 libumejni.so:E8F0D75C ADD R0, SP libumejni.so:E8F0D75E LDR R0, [R0] ; R0=4,变量i?这次=5 libumejni.so:E8F0D760 LDR R3, =0x920 libumejni.so:E8F0D762 ADD R3, SP libumejni.so:E8F0D764 LDR R3, [R3] ; 前面计算出的四个字节 libumejni.so:E8F0D766 PUSH {R3} libumejni.so:E8F0D768 POP {R2} libumejni.so:E8F0D76A EORS R2, R1 ; R2=R2^R1=0x452933D7^0xFF=0x45293328 libumejni.so:E8F0D76C LSLS R6, R0, #2 ; R6=R0<<2=0x4<<2=0x10 变量i左移2 libumejni.so:E8F0D76E LDR R0, =0x7E613907 ; R0=0x7E613907 libumejni.so:E8F0D770 ADDS R5, R6, R0 ; R5=R6&R0=0x10&0x7E613907=0x7E613917 libumejni.so:E8F0D772 MOV R12, R4 ; R12=R4=0x8C libumejni.so:E8F0D774 LDR R4, =0x4C0 libumejni.so:E8F0D776 ADD R4, SP libumejni.so:E8F0D778 STR R6, [R4] ; R4指向地址=R6=0x10,将i左移2的值存到另一个变量中 libumejni.so:E8F0D77A SUBS R5, #0x10 ; R5=R5-0x10=0x7E613917-0x10=0x7E613907 libumejni.so:E8F0D77C SUBS R5, R5, R0 ; R5=R5-R0=7E613907-7E613907=0x0,好像是i左移2位-0x10 libumejni.so:E8F0D77E LDR R0, =0x9C0 libumejni.so:E8F0D780 ADD R0, SP ; R0指向urG... libumejni.so:E8F0D782 LDR R4, =0x4B8 libumejni.so:E8F0D784 ADD R4, SP libumejni.so:E8F0D786 STR R0, [R4] ; 将urG8i8...16字节地址放到R4 libumejni.so:E8F0D788 LDRB R5, [R0,R5] ; R5=R0[R5]=urG...[0x0]=0x75,下标是i<<2-0x10 libumejni.so:E8F0D78A ANDS R2, R5 ; R2=R2&R5=0x45293328&0x75=0x20,这里的R2是个地址,诡异 libumejni.so:E8F0D78C EORS R5, R1 ; R5=R5^R1=0x75^0xFF=0x8A libumejni.so:E8F0D78E ANDS R5, R3 ; R5=R5&R3=0x8A&0x452933D7=0x82,奇怪了,每次都0x82 libumejni.so:E8F0D790 ORRS R5, R2 ; R5=R5|R2=0x82|0x20=0xA2 libumejni.so:E8F0D792 LDR R2, =0x898 libumejni.so:E8F0D794 ADD R2, SP libumejni.so:E8F0D796 LDR R2, [R2] ; R2=0x4,变量i,不是固定值 libumejni.so:E8F0D798 LSLS R2, R2, #2 ; R2=R2<<2=0x4<<2=0x10,就是i<<2 libumejni.so:E8F0D79A LDR R3, =0x688 libumejni.so:E8F0D79C ADD R3, SP libumejni.so:E8F0D79E STR R2, [R3] ; set R3=R2=0x10,将i<<2放到一个变量中 libumejni.so:E8F0D7A0 STRB R5, [R0,R2] ; 设置到urG...16字符的根据i<<2字节=R5=0xA2 libumejni.so:E8F0D7A2 MOV R4, R12 ; R4=R12=0x8C,将urG的指针放到另一个变量中 libumejni.so:E8F0D7A4 PUSH {R4} libumejni.so:E8F0D7A6 POP {R2} libumejni.so:E8F0D7A8 ADDS R2, #0x54 libumejni.so:E8F0D7AA EORS R2, R1 libumejni.so:E8F0D7AC LDR R3, =0x69C libumejni.so:E8F0D7AE ADD R3, SP libumejni.so:E8F0D7B0 LDR R3, [R3] libumejni.so:E8F0D7B2 NEGS R3, R3 libumejni.so:E8F0D7B4 SUBS R3, R3, R6 libumejni.so:E8F0D7B6 SUBS R3, R0, R3 libumejni.so:E8F0D7B8 LDRB R5, [R3] ; 取出urg..第二个字节=0x72,取urG[i]的字节 libumejni.so:E8F0D7BA PUSH {R5} libumejni.so:E8F0D7BC POP {R3} libumejni.so:E8F0D7BE ANDS R3, R2 libumejni.so:E8F0D7C0 EORS R5, R1 libumejni.so:E8F0D7C2 MOVS R6, #0xE0 libumejni.so:E8F0D7C4 ANDS R5, R6 libumejni.so:E8F0D7C6 ORRS R5, R3 libumejni.so:E8F0D7C8 LDR R4, =0x920 libumejni.so:E8F0D7CA ADD R4, SP libumejni.so:E8F0D7CC LDRB R0, [R4,#1] ; 取新4字节第二个0x33 libumejni.so:E8F0D7CE LDR R3, =0x644 libumejni.so:E8F0D7D0 ADD R3, SP libumejni.so:E8F0D7D2 STR R4, [R3] ; R3=将新4字节地址存到另一个变量,无需太关心这个 libumejni.so:E8F0D7D4 ANDS R2, R0 libumejni.so:E8F0D7D6 EORS R0, R1 libumejni.so:E8F0D7D8 ANDS R0, R6 libumejni.so:E8F0D7DA ORRS R0, R2 libumejni.so:E8F0D7DC EORS R0, R5 libumejni.so:E8F0D7DE MOVS R5, #1 libumejni.so:E8F0D7E0 LDR R6, =0x4BC libumejni.so:E8F0D7E2 ADD R6, SP libumejni.so:E8F0D7E4 STR R5, [R6] ; 将固定值R5=1放到另一个变量 libumejni.so:E8F0D7E6 LDR R3, =0x688 libumejni.so:E8F0D7E8 ADD R3, SP libumejni.so:E8F0D7EA LDR R3, [R3] ; R3=0x10,取出i<<2的值 libumejni.so:E8F0D7EC PUSH {R3} libumejni.so:E8F0D7EE POP {R2} libumejni.so:E8F0D7F0 ORRS R2, R5 ; 相当于i<<2+1的样子,目的是作为下标 libumejni.so:E8F0D7F2 LDR R5, =0x4B8 libumejni.so:E8F0D7F4 ADD R5, SP libumejni.so:E8F0D7F6 LDR R5, [R5] ; R5指向urG...地址,无需关心这个 libumejni.so:E8F0D7F8 STRB R0, [R5,R2] ; 设置到urG..后面第二个字节,0x41 libumejni.so:E8F0D7FA LDRB R0, [R4,#2] ; R0=新4字节的第三个=0x29 libumejni.so:E8F0D7FC PUSH {R0} libumejni.so:E8F0D7FE POP {R2} libumejni.so:E8F0D800 EORS R2, R1 ; R2=R2^R1=0x29^0xFF=0xD6 libumejni.so:E8F0D802 LDR R4, =0x69C libumejni.so:E8F0D804 ADD R4, SP libumejni.so:E8F0D806 LDR R4, [R4] ; R4=0xF1固定值?i<<2 libumejni.so:E8F0D808 MVNS R6, R4 ; R6=~R4=0xFFFFFFF1=0xE libumejni.so:E8F0D80A LDR R4, =0x4C0 libumejni.so:E8F0D80C ADD R4, SP libumejni.so:E8F0D80E LDR R4, [R4] ; R4=0x10,取出i<<2的值 libumejni.so:E8F0D810 SUBS R6, R6, R4 ; R6=R6-R4=0xE-0x10=0xFFFFFFFE libumejni.so:E8F0D812 SUBS R6, R5, R6 libumejni.so:E8F0D814 LDRB R6, [R6] ; R6指向urG...第三个字节,就是取出urG[i+1]的值 libumejni.so:E8F0D816 ANDS R2, R6 libumejni.so:E8F0D818 EORS R6, R1 libumejni.so:E8F0D81A ANDS R6, R0 libumejni.so:E8F0D81C ORRS R6, R2 libumejni.so:E8F0D81E MOVS R0, #2 libumejni.so:E8F0D820 ORRS R0, R3 libumejni.so:E8F0D822 PUSH {R5} libumejni.so:E8F0D824 POP {R3} libumejni.so:E8F0D826 STRB R6, [R3,R0] ; R6 0x6E放到urG...字节后面第三个,就是set urG[i<<2+2] libumejni.so:E8F0D828 MOVS R2, #0x2D libumejni.so:E8F0D82A PUSH {R1} libumejni.so:E8F0D82C POP {R6} libumejni.so:E8F0D82E EORS R6, R2 ; R6=R6^R2=0xFF^0x2D=0xD2 libumejni.so:E8F0D830 LDR R0, =0x4F5ADFB5 libumejni.so:E8F0D832 SUBS R4, R4, R0 libumejni.so:E8F0D834 LDR R5, =0x4BC libumejni.so:E8F0D836 ADD R5, SP libumejni.so:E8F0D838 LDR R5, [R5] ; R5=0x1固定值? libumejni.so:E8F0D83A ADDS R4, R3, R4 libumejni.so:E8F0D83C SUBS R4, #0xD libumejni.so:E8F0D83E LDRB R4, [R4,R0] ; R4=ugG[i+2]的值,上面就是迷惑 libumejni.so:E8F0D840 PUSH {R4} libumejni.so:E8F0D842 POP {R0} libumejni.so:E8F0D844 ANDS R0, R6 libumejni.so:E8F0D846 EORS R4, R1 libumejni.so:E8F0D848 ANDS R4, R2 ; R4=R4&R2=0x91&0x2D=0x1 libumejni.so:E8F0D84A ORRS R4, R0 libumejni.so:E8F0D84C LDR R0, =0x644 libumejni.so:E8F0D84E ADD R0, SP libumejni.so:E8F0D850 LDR R0, [R0] ; 指向新4字节,无需关心 libumejni.so:E8F0D852 LDRB R0, [R0,#3] ; R0=新4字节第四个值 libumejni.so:E8F0D854 ANDS R6, R0 libumejni.so:E8F0D856 EORS R1, R0 libumejni.so:E8F0D858 ANDS R1, R2 libumejni.so:E8F0D85A ORRS R1, R6 libumejni.so:E8F0D85C EORS R1, R4 libumejni.so:E8F0D85E MOVS R0, #3 libumejni.so:E8F0D860 LDR R2, =0x688 libumejni.so:E8F0D862 ADD R2, SP libumejni.so:E8F0D864 LDR R2, [R2] ; R2=0x10固定值?i<<2 libumejni.so:E8F0D866 ORRS R0, R2 ; 相当于i<<2+3 libumejni.so:E8F0D868 STRB R1, [R3,R0] ; 相当于设置urG[i<<2+2]的值 libumejni.so:E8F0D86A LDR R0, =0x898 libumejni.so:E8F0D86C ADD R0, SP libumejni.so:E8F0D86E LDR R0, [R0] ; R0=0x4固定值?变量i libumejni.so:E8F0D870 NEGS R0, R0 ; R0=0xFFFFFFFC libumejni.so:E8F0D872 SUBS R0, R5, R0 ; R0=0x5 libumejni.so:E8F0D874 LDR R2, =0x7A8 libumejni.so:E8F0D876 ADD R2, SP ; 变量i++ libumejni.so:E8F0D878 STR R0, [R2] ; 同步变量i libumejni.so:E8F0D87A LDR R0, [SP,#arg_2A8] libumejni.so:E8F0D87C LDR R1, [R0] libumejni.so:E8F0D87E MOVS R0, #0 libumejni.so:E8F0D880 CMP R1, #0xA libumejni.so:E8F0D882 PUSH {R5} libumejni.so:E8F0D884 POP {R3} libumejni.so:E8F0D886 BLT loc_E8F0D88C
指向明文的地址
[stack]:FFAA18D4 DCB 0xC0 [stack]:FFAA18D5 DCB 0xBF [stack]:FFAA18D6 DCB 0x80 [stack]:FFAA18D7 DCB 0xEE [Landroid/content/pm/Signature; [anon:libc_malloc]:DDEA7C60 DCB 0x5B ; [ [anon:libc_malloc]:DDEA7C61 DCB 0x4C ; L [anon:libc_malloc]:DDEA7C62 DCB 0x61 ; a [anon:libc_malloc]:DDEA7C63 DCB 0x6E ; n [anon:libc_malloc]:DDEA7C64 DCB 0x64 ; d [anon:libc_malloc]:DDEA7C65 DCB 0x72 ; r [anon:libc_malloc]:DDEA7C66 DCB 0x6F ; o [anon:libc_malloc]:DDEA7C67 DCB 0x69 ; i [anon:libc_malloc]:DDEA7C68 DCB 0x64 ; d [anon:libc_malloc]:DDEA7C69 DCB 0x2F ; / [anon:libc_malloc]:DDEA7C6A DCB 0x63 ; c [anon:libc_malloc]:DDEA7C6B DCB 0x6F ; o [anon:libc_malloc]:DDEA7C6C DCB 0x6E ; n [anon:libc_malloc]:DDEA7C6D DCB 0x74 ; t [anon:libc_malloc]:DDEA7C6E DCB 0x65 ; e [anon:libc_malloc]:DDEA7C6F DCB 0x6E ; n [anon:libc_malloc]:DDEA7C70 DCB 0x74 ; t [anon:libc_malloc]:DDEA7C71 DCB 0x2F ; / [anon:libc_malloc]:DDEA7C72 DCB 0x70 ; p [anon:libc_malloc]:DDEA7C73 DCB 0x6D ; m [anon:libc_malloc]:DDEA7C74 DCB 0x2F ; / [anon:libc_malloc]:DDEA7C75 DCB 0x53 ; S [anon:libc_malloc]:DDEA7C76 DCB 0x69 ; i [anon:libc_malloc]:DDEA7C77 DCB 0x67 ; g [anon:libc_malloc]:DDEA7C78 DCB 0x6E ; n [anon:libc_malloc]:DDEA7C79 DCB 0x61 ; a [anon:libc_malloc]:DDEA7C7A DCB 0x74 ; t [anon:libc_malloc]:DDEA7C7B DCB 0x75 ; u [anon:libc_malloc]:DDEA7C7C DCB 0x72 ; r [anon:libc_malloc]:DDEA7C7D DCB 0x65 ; e [anon:libc_malloc]:DDEA7C7E DCB 0x3B ; ; [anon:libc_malloc]:DDEA7C60 DCB 0x7B ; { [anon:libc_malloc]:DDEA7C61 DCB 0x22 ; " [anon:libc_malloc]:DDEA7C62 DCB 0x6C ; l [anon:libc_malloc]:DDEA7C63 DCB 0x61 ; a [anon:libc_malloc]:DDEA7C64 DCB 0x73 ; s [anon:libc_malloc]:DDEA7C65 DCB 0x74 ; t [anon:libc_malloc]:DDEA7C66 DCB 0x52 ; R [anon:libc_malloc]:DDEA7C67 DCB 0x65 ; e [anon:libc_malloc]:DDEA7C68 DCB 0x71 ; q [anon:libc_malloc]:DDEA7C69 DCB 0x54 ; T [anon:libc_malloc]:DDEA7C6A DCB 0x69 ; i [anon:libc_malloc]:DDEA7C6B DCB 0x6D ; m [anon:libc_malloc]:DDEA7C6C DCB 0x65 ; e [anon:libc_malloc]:DDEA7C6D DCB 0x22 ; " [anon:libc_malloc]:DDEA7C6E DCB 0x3A ; : [anon:libc_malloc]:DDEA7C6F DCB 0x22 ; " [anon:libc_malloc]:DDEA7C70 DCB 0x33 ; 3 [anon:libc_malloc]:DDEA7C71 DCB 0x36 ; 6 [anon:libc_malloc]:DDEA7C72 DCB 0x35 ; 5 [anon:libc_malloc]:DDEA7C73 DCB 0x22 ; " [anon:libc_malloc]:DDEA7C74 DCB 0x7D ; } [anon:libc_malloc]:DDEA7C75 DCB 0x53 ; S [anon:libc_malloc]:DDEA7C76 DCB 0x69 ; i [anon:libc_malloc]:DDEA7C77 DCB 0x67 ; g [anon:libc_malloc]:DDEA7C78 DCB 0x6E ; n [anon:libc_malloc]:DDEA7C79 DCB 0x61 ; a [anon:libc_malloc]:DDEA7C7A DCB 0x74 ; t [anon:libc_malloc]:DDEA7C7B DCB 0x75 ; u [anon:libc_malloc]:DDEA7C7C DCB 0x72 ; r [anon:libc_malloc]:DDEA7C7D DCB 0x65 ; e [anon:libc_malloc]:DDEA7C7E DCB 0x3B ; ;
明文后的地址,存到了这里
[stack]:FFAA18F4 DCB 0x75 ; u [stack]:FFAA18F5 DCB 0x7C ; | [stack]:FFAA18F6 DCB 0xEA [stack]:FFAA18F7 DCB 0xDD
明文长度跟一个应长度X(不知道怎么来的)的差,0x20-0x15=0xB;
然后明文不够X长度的,在后面补差数0xB;
[anon:libc_malloc]:DDEA7C60 DCB 0x7B ; { [anon:libc_malloc]:DDEA7C61 DCB 0x22 ; " [anon:libc_malloc]:DDEA7C62 DCB 0x6C ; l [anon:libc_malloc]:DDEA7C63 DCB 0x61 ; a [anon:libc_malloc]:DDEA7C64 DCB 0x73 ; s [anon:libc_malloc]:DDEA7C65 DCB 0x74 ; t [anon:libc_malloc]:DDEA7C66 DCB 0x52 ; R [anon:libc_malloc]:DDEA7C67 DCB 0x65 ; e [anon:libc_malloc]:DDEA7C68 DCB 0x71 ; q [anon:libc_malloc]:DDEA7C69 DCB 0x54 ; T [anon:libc_malloc]:DDEA7C6A DCB 0x69 ; i [anon:libc_malloc]:DDEA7C6B DCB 0x6D ; m [anon:libc_malloc]:DDEA7C6C DCB 0x65 ; e [anon:libc_malloc]:DDEA7C6D DCB 0x22 ; " [anon:libc_malloc]:DDEA7C6E DCB 0x3A ; : [anon:libc_malloc]:DDEA7C6F DCB 0x22 ; " [anon:libc_malloc]:DDEA7C70 DCB 0x33 ; 3 [anon:libc_malloc]:DDEA7C71 DCB 0x36 ; 6 [anon:libc_malloc]:DDEA7C72 DCB 0x35 ; 5 [anon:libc_malloc]:DDEA7C73 DCB 0x22 ; " [anon:libc_malloc]:DDEA7C74 DCB 0x7D ; } [anon:libc_malloc]:DDEA7C75 DCB 0xB [anon:libc_malloc]:DDEA7C76 DCB 0xB [anon:libc_malloc]:DDEA7C77 DCB 0xB [anon:libc_malloc]:DDEA7C78 DCB 0xB [anon:libc_malloc]:DDEA7C79 DCB 0xB [anon:libc_malloc]:DDEA7C7A DCB 0xB [anon:libc_malloc]:DDEA7C7B DCB 0xB [anon:libc_malloc]:DDEA7C7C DCB 0xB [anon:libc_malloc]:DDEA7C7D DCB 0xB [anon:libc_malloc]:DDEA7C7E DCB 0xB [anon:libc_malloc]:DDEA7C7F DCB 0xB
补差完后
for 16 in 明文
for 4 in 16
再循环i,放到逻辑中,取出urG...的4个字节
i=0,取出了urG0
[stack]:FFAA1B38 DCB 0x75 ; u [stack]:FFAA1B39 DCB 0x72 ; r [stack]:FFAA1B3A DCB 0x47 ; G [stack]:FFAA1B3B DCB 0x30 ; 0
取4个urG字节的逻辑,实际这个逻辑就是一个urG字符串拷贝而已
libumejni.so:E8F1212C ; START OF FUNCTION CHUNK FOR sub_E8F11A44 libumejni.so:E8F1212C libumejni.so:E8F1212C loc_E8F1212C libumejni.so:E8F1212C LDR R0, =0x894 libumejni.so:E8F1212E ADD R0, SP libumejni.so:E8F12130 LDR R0, [R0] ; 4变量i? libumejni.so:E8F12132 LSLS R2, R0, #2 ; 变量i<<2 libumejni.so:E8F12134 LDR R1, =0x758 libumejni.so:E8F12136 ADD R1, SP libumejni.so:E8F12138 LDR R1, [R1] ; 指向urg... libumejni.so:E8F1213A LDRB R0, [R1,R2] ; 取出urG...[i<<2] libumejni.so:E8F1213C LDR R1, =0x9C0 libumejni.so:E8F1213E ADD R1, SP libumejni.so:E8F12140 LDR R5, =0x4DC libumejni.so:E8F12142 ADD R5, SP libumejni.so:E8F12144 STR R1, [R5] libumejni.so:E8F12146 STRB R0, [R1,R2] ; 可能是存放结果的地址 libumejni.so:E8F12148 LDR R4, =0x69C libumejni.so:E8F1214A ADD R4, SP libumejni.so:E8F1214C LDR R4, [R4] ; R4=0xFFFFFFF1固定值? libumejni.so:E8F1214E ADDS R4, #0xE ; R4=0xFFFFFFFF libumejni.so:E8F12150 LDR R0, =0x2608858F ; 固定值? libumejni.so:E8F12152 LDR R5, =0x688 libumejni.so:E8F12154 ADD R5, SP libumejni.so:E8F12156 STR R0, [R5] ; 将上面固定值0x2608858F放到R5 libumejni.so:E8F12158 PUSH {R4} libumejni.so:E8F1215A POP {R3} libumejni.so:E8F1215C EORS R3, R0 ; R3=R3^R0=0xFFFFFFFF^0x2608858F=0xD9F77A70 libumejni.so:E8F1215E MOVS R1, #1 ; R1=1; libumejni.so:E8F12160 LDR R5, =0x644 libumejni.so:E8F12162 ADD R5, SP libumejni.so:E8F12164 STR R1, [R5] libumejni.so:E8F12166 PUSH {R3} libumejni.so:E8F12168 POP {R0} libumejni.so:E8F1216A ANDS R0, R1 ; r0=r0&r1=0xD9F77A70&0x1=0 libumejni.so:E8F1216C PUSH {R4} libumejni.so:E8F1216E POP {R6} libumejni.so:E8F12170 EORS R6, R1 ; r6=r6^r1=0xFFFFFFFF^0x1=0xFFFFFFFE libumejni.so:E8F12172 LDR R5, =0x4BC libumejni.so:E8F12174 ADD R5, SP ; r5=0xFF固定值? libumejni.so:E8F12176 STR R6, [R5] libumejni.so:E8F12178 LDR R1, =0x688 libumejni.so:E8F1217A ADD R1, SP libumejni.so:E8F1217C LDR R1, [R1] ; R1=0x2608858F上面存储的 libumejni.so:E8F1217E ANDS R6, R1 ; r6=r6&r1=0xFFFFFFFE&0x2608858F=0x2608858E libumejni.so:E8F12180 ORRS R6, R0 ; r6=r6|r0=0x2608858E|0x0=0x2608858E libumejni.so:E8F12182 LDR R5, =0x4C0 libumejni.so:E8F12184 ADD R5, SP libumejni.so:E8F12186 STR R2, [R5] ; 将r2 0x0放到r5 libumejni.so:E8F12188 PUSH {R2} libumejni.so:E8F1218A POP {R1} libumejni.so:E8F1218C ANDS R1, R3 ; r1=r1&r3=0x0&0xD9F77A70=0x0 libumejni.so:E8F1218E EORS R2, R4 ; r2=r2^r4=0x0^0xFFFFFFFF=0xFFFFFFFF libumejni.so:E8F12190 PUSH {R2} libumejni.so:E8F12192 POP {R0} libumejni.so:E8F12194 LDR R5, =0x688 libumejni.so:E8F12196 ADD R5, SP libumejni.so:E8F12198 LDR R5, [R5] ; r5=0x2608858F上面的 libumejni.so:E8F1219A ANDS R0, R5 ; r0=r0&r5=0xFFFFFFFF&0x2608858F=0x2608858F libumejni.so:E8F1219C ORRS R0, R1 ; r0=r0|r1=0x2608858F|0x0=0x2608858F libumejni.so:E8F1219E EORS R0, R6 ; r0=r0^r6=0x2608858F^0x2608858E=0x1 libumejni.so:E8F121A0 LDR R1, =0x4BC libumejni.so:E8F121A2 ADD R1, SP libumejni.so:E8F121A4 LDR R1, [R1] ; r1=0xFFFFFFFE固定值? libumejni.so:E8F121A6 ORRS R2, R1 ; r2=r2|r1=0xFFFFFFFE|0x1=0xFFFFFFFF libumejni.so:E8F121A8 EORS R2, R4 ; r2=r2^r4=0xFFFFFFFF^0xFFFFFFFF=0 libumejni.so:E8F121AA LDR R1, =0x688 libumejni.so:E8F121AC ADD R1, SP libumejni.so:E8F121AE LDR R1, [R1] ; r1=0x2608858F libumejni.so:E8F121B0 ORRS R3, R1 ; r3=r3|r1=0xD9F77A70|0x2608858F=0xFFFFFFFF libumejni.so:E8F121B2 ANDS R3, R2 ; r3=r3^r2=0x0 libumejni.so:E8F121B4 ORRS R3, R0 ; r3=r3|r0=0x1 libumejni.so:E8F121B6 LDR R0, =0x758 libumejni.so:E8F121B8 ADD R0, SP libumejni.so:E8F121BA LDR R0, [R0] ; 指向urG libumejni.so:E8F121BC LDRB R0, [R0,R3] ; r0=urG..[r3] 指向第二个 libumejni.so:E8F121BE LDR R2, =0x4DC libumejni.so:E8F121C0 ADD R2, SP libumejni.so:E8F121C2 LDR R2, [R2] libumejni.so:E8F121C4 STRB R0, [R2,R3] ; 将对应urG取出的第二个追加到结果里 libumejni.so:E8F121C6 MOVS R0, #2 ; r0=2 libumejni.so:E8F121C8 LDR R3, =0x4C0 libumejni.so:E8F121CA ADD R3, SP libumejni.so:E8F121CC LDR R3, [R3] ; r3=0,可能是变量i libumejni.so:E8F121CE ORRS R0, R3 ; r0=r0|r3=0x2|0x0=0x2 libumejni.so:E8F121D0 LDR R1, =0x758 libumejni.so:E8F121D2 ADD R1, SP libumejni.so:E8F121D4 LDR R1, [R1] ; 指向urG libumejni.so:E8F121D6 LDRB R1, [R1,R0] ; 取出i+2的追加到结果中 libumejni.so:E8F121D8 STRB R1, [R2,R0] libumejni.so:E8F121DA MOVS R0, #3 ; r0=3 libumejni.so:E8F121DC ORRS R0, R3 ; r0=r0|r3=0x3,应该是变量|0x3,就是+3的感觉 libumejni.so:E8F121DE LDR R1, =0x758 libumejni.so:E8F121E0 ADD R1, SP libumejni.so:E8F121E2 LDR R1, [R1] libumejni.so:E8F121E4 LDRB R1, [R1,R0] libumejni.so:E8F121E6 STRB R1, [R2,R0] libumejni.so:E8F121E8 LDR R0, =0x894 libumejni.so:E8F121EA ADD R0, SP libumejni.so:E8F121EC LDR R0, [R0] libumejni.so:E8F121EE NEGS R0, R0 libumejni.so:E8F121F0 LDR R1, =0x644 libumejni.so:E8F121F2 ADD R1, SP libumejni.so:E8F121F4 LDR R1, [R1] libumejni.so:E8F121F6 SUBS R0, R1, R0 libumejni.so:E8F121F8 BL loc_E8F13FDC libumejni.so:E8F121F8 ; END OF FUNCTION CHUNK FOR sub_E8F11A44
i=4,j=0
i<<2-4+j=12
按照urG..[i<<2-4+j],获取4个字节,得到hjfL。
[[stack]:FFAA1A98 DCB 0x68 ; h [stack]:FFAA1A99 DCB 0x4A ; J [stack]:FFAA1A9A DCB 0x66 ; f [stack]:FFAA1A9B DCB 0x4C ; L
上次的四个字节是
[stack]:FFAA1A98 DCB 0xD7 [stack]:FFAA1A99 DCB 0x33 ; 3 [stack]:FFAA1A9A DCB 0x29 ; ) [stack]:FFAA1A9B DCB 0x45 ; E
第一次追加urG的四个字节
[stack]:FFAA1B48 DCB 0xA2 [stack]:FFAA1B49 DCB 0x41 ; A [stack]:FFAA1B4A DCB 0x6E ; n [stack]:FFAA1B4B DCB 0x75 ; u
第二次追加的4个字节
[stack]:FFAA1B47 DCB 0x4C ; L [stack]:FFAA1B48 DCB 0xA2 [stack]:FFAA1B49 DCB 0x41 ; A [stack]:FFAA1B4A DCB 0x6E ; n [stack]:FFAA1B4B DCB 0x75 ; u [stack]:FFAA1B4C DCB 0xCB [stack]:FFAA1B4D DCB 0x79 ; y [stack]:FFAA1B4E DCB 0x3C ; < [stack]:FFAA1B4F DCB 0x1B
然后使用这4个字节进入另一个非base64字符集的逻辑
libumejni.so:E8F15C8E unk_E8F15C8E ; DATA XREF: sub_E8F1126C+20↑o libumejni.so:E8F15C8E DCB 0x63 ; c ; libumejni.so:off_E8F115EC↑o ... libumejni.so:E8F15C8F DCB 0x7C ; | libumejni.so:E8F15C90 DCB 0x77 ; w libumejni.so:E8F15C91 DCB 0x7B ; { libumejni.so:E8F15C92 DCB 0xF2 libumejni.so:E8F15C93 DCB 0x6B ; k libumejni.so:E8F15C94 DCB 0x6F ; o libumejni.so:E8F15C95 DCB 0xC5 libumejni.so:E8F15C96 DCB 0x30 ; 0 libumejni.so:E8F15C97 DCB 1 libumejni.so:E8F15C98 DCB 0x67 ; g libumejni.so:E8F15C99 DCB 0x2B ; + libumejni.so:E8F15C9A DCB 0xFE libumejni.so:E8F15C9B DCB 0xD7 libumejni.so:E8F15C9C DCB 0xAB libumejni.so:E8F15C9D DCB 0x76 ; v libumejni.so:E8F15C9E DCB 0xCA libumejni.so:E8F15C9F DCB 0x82 libumejni.so:E8F15CA0 DCB 0xC9 libumejni.so:E8F15CA1 DCB 0x7D ; } libumejni.so:E8F15CA2 DCB 0xFA libumejni.so:E8F15CA3 DCB 0x59 ; Y libumejni.so:E8F15CA4 DCB 0x47 ; G libumejni.so:E8F15CA5 DCB 0xF0 libumejni.so:E8F15CA6 DCB 0xAD libumejni.so:E8F15CA7 DCB 0xD4 libumejni.so:E8F15CA8 DCB 0xA2 libumejni.so:E8F15CA9 DCB 0xAF libumejni.so:E8F15CAA DCB 0x9C libumejni.so:E8F15CAB DCB 0xA4 libumejni.so:E8F15CAC DCB 0x72 ; r libumejni.so:E8F15CAD DCB 0xC0 libumejni.so:E8F15CAE DCB 0xB7 libumejni.so:E8F15CAF DCB 0xFD libumejni.so:E8F15CB0 DCB 0x93 libumejni.so:E8F15CB1 DCB 0x26 ; & libumejni.so:E8F15CB2 DCB 0x36 ; 6 libumejni.so:E8F15CB3 DCB 0x3F ; ? libumejni.so:E8F15CB4 DCB 0xF7 libumejni.so:E8F15CB5 DCB 0xCC libumejni.so:E8F15CB6 DCB 0x34 ; 4 libumejni.so:E8F15CB7 DCB 0xA5 libumejni.so:E8F15CB8 DCB 0xE5 libumejni.so:E8F15CB9 DCB 0xF1 libumejni.so:E8F15CBA DCB 0x71 ; q libumejni.so:E8F15CBB DCB 0xD8 libumejni.so:E8F15CBC DCB 0x31 ; 1 libumejni.so:E8F15CBD DCB 0x15 libumejni.so:E8F15CBE DCB 4 libumejni.so:E8F15CBF DCB 0xC7 libumejni.so:E8F15CC0 DCB 0x23 ; # libumejni.so:E8F15CC1 DCB 0xC3 libumejni.so:E8F15CC2 DCB 0x18 libumejni.so:E8F15CC3 DCB 0x96 libumejni.so:E8F15CC4 DCB 5 libumejni.so:E8F15CC5 DCB 0x9A libumejni.so:E8F15CC6 DCB 7 libumejni.so:E8F15CC7 DCB 0x12 libumejni.so:E8F15CC8 DCB 0x80 libumejni.so:E8F15CC9 DCB 0xE2 libumejni.so:E8F15CCA DCB 0xEB libumejni.so:E8F15CCB DCB 0x27 ; ' libumejni.so:E8F15CCC DCB 0xB2 libumejni.so:E8F15CCD DCB 0x75 ; u libumejni.so:E8F15CCE DCB 9 libumejni.so:E8F15CCF DCB 0x83 libumejni.so:E8F15CD0 DCB 0x2C ; , libumejni.so:E8F15CD1 DCB 0x1A libumejni.so:E8F15CD2 DCB 0x1B libumejni.so:E8F15CD3 DCB 0x6E ; n libumejni.so:E8F15CD4 DCB 0x5A ; Z libumejni.so:E8F15CD5 DCB 0xA0 libumejni.so:E8F15CD6 DCB 0x52 ; R libumejni.so:E8F15CD7 DCB 0x3B ; ; libumejni.so:E8F15CD8 DCB 0xD6 libumejni.so:E8F15CD9 DCB 0xB3 libumejni.so:E8F15CDA DCB 0x29 ; ) libumejni.so:E8F15CDB DCB 0xE3 libumejni.so:E8F15CDC DCB 0x2F ; / libumejni.so:E8F15CDD DCB 0x84 libumejni.so:E8F15CDE DCB 0x53 ; S libumejni.so:E8F15CDF DCB 0xD1 libumejni.so:E8F15CE0 DCB 0 libumejni.so:E8F15CE1 DCB 0xED libumejni.so:E8F15CE2 DCB 0x20 libumejni.so:E8F15CE3 DCB 0xFC libumejni.so:E8F15CE4 DCB 0xB1 libumejni.so:E8F15CE5 DCB 0x5B ; [ libumejni.so:E8F15CE6 DCB 0x6A ; j libumejni.so:E8F15CE7 DCB 0xCB libumejni.so:E8F15CE8 DCB 0xBE libumejni.so:E8F15CE9 DCB 0x39 ; 9 libumejni.so:E8F15CEA DCB 0x4A ; J libumejni.so:E8F15CEB DCB 0x4C ; L libumejni.so:E8F15CEC DCB 0x58 ; X libumejni.so:E8F15CED DCB 0xCF libumejni.so:E8F15CEE DCB 0xD0 libumejni.so:E8F15CEF DCB 0xEF libumejni.so:E8F15CF0 DCB 0xAA libumejni.so:E8F15CF1 DCB 0xFB libumejni.so:E8F15CF2 DCB 0x43 ; C libumejni.so:E8F15CF3 DCB 0x4D ; M libumejni.so:E8F15CF4 DCB 0x33 ; 3 libumejni.so:E8F15CF5 DCB 0x85 libumejni.so:E8F15CF6 DCB 0x45 ; E libumejni.so:E8F15CF7 DCB 0xF9 libumejni.so:E8F15CF8 DCB 2 libumejni.so:E8F15CF9 DCB 0x7F ; libumejni.so:E8F15CFA DCB 0x50 ; P libumejni.so:E8F15CFB DCB 0x3C ; < libumejni.so:E8F15CFC DCB 0x9F libumejni.so:E8F15CFD DCB 0xA8 libumejni.so:E8F15CFE DCB 0x51 ; Q libumejni.so:E8F15CFF DCB 0xA3 libumejni.so:E8F15D00 DCB 0x40 ; @ libumejni.so:E8F15D01 DCB 0x8F libumejni.so:E8F15D02 DCB 0x92 libumejni.so:E8F15D03 DCB 0x9D libumejni.so:E8F15D04 DCB 0x38 ; 8 libumejni.so:E8F15D05 DCB 0xF5 libumejni.so:E8F15D06 DCB 0xBC libumejni.so:E8F15D07 DCB 0xB6 libumejni.so:E8F15D08 DCB 0xDA libumejni.so:E8F15D09 DCB 0x21 ; ! libumejni.so:E8F15D0A DCB 0x10 libumejni.so:E8F15D0B DCB 0xFF libumejni.so:E8F15D0C DCB 0xF3 libumejni.so:E8F15D0D DCB 0xD2 libumejni.so:E8F15D0E DCB 0xCD libumejni.so:E8F15D0F DCB 0xC libumejni.so:E8F15D10 DCB 0x13 libumejni.so:E8F15D11 DCB 0xEC libumejni.so:E8F15D12 DCB 0x5F ; _ libumejni.so:E8F15D13 DCB 0x97 libumejni.so:E8F15D14 DCB 0x44 ; D libumejni.so:E8F15D15 DCB 0x17 libumejni.so:E8F15D16 DCB 0xC4 libumejni.so:E8F15D17 DCB 0xA7 libumejni.so:E8F15D18 DCB 0x7E ; ~ libumejni.so:E8F15D19 DCB 0x3D ; = libumejni.so:E8F15D1A DCB 0x64 ; d libumejni.so:E8F15D1B DCB 0x5D ; ] libumejni.so:E8F15D1C DCB 0x19 libumejni.so:E8F15D1D DCB 0x73 ; s libumejni.so:E8F15D1E DCB 0x60 ; ` libumejni.so:E8F15D1F DCB 0x81 libumejni.so:E8F15D20 DCB 0x4F ; O libumejni.so:E8F15D21 DCB 0xDC libumejni.so:E8F15D22 DCB 0x22 ; " libumejni.so:E8F15D23 DCB 0x2A ; * libumejni.so:E8F15D24 DCB 0x90 libumejni.so:E8F15D25 DCB 0x88 libumejni.so:E8F15D26 DCB 0x46 ; F libumejni.so:E8F15D27 DCB 0xEE libumejni.so:E8F15D28 DCB 0xB8 libumejni.so:E8F15D29 DCB 0x14 libumejni.so:E8F15D2A DCB 0xDE libumejni.so:E8F15D2B DCB 0x5E ; ^ libumejni.so:E8F15D2C DCB 0xB libumejni.so:E8F15D2D DCB 0xDB libumejni.so:E8F15D2E DCB 0xE0 libumejni.so:E8F15D2F DCB 0x32 ; 2 libumejni.so:E8F15D30 DCB 0x3A ; : libumejni.so:E8F15D31 DCB 0xA libumejni.so:E8F15D32 DCB 0x49 ; I libumejni.so:E8F15D33 DCB 6 libumejni.so:E8F15D34 DCB 0x24 ; $ libumejni.so:E8F15D35 DCB 0x5C ; \ libumejni.so:E8F15D36 DCB 0xC2 libumejni.so:E8F15D37 DCB 0xD3 libumejni.so:E8F15D38 DCB 0xAC libumejni.so:E8F15D39 DCB 0x62 ; b libumejni.so:E8F15D3A DCB 0x91 libumejni.so:E8F15D3B DCB 0x95 libumejni.so:E8F15D3C DCB 0xE4 libumejni.so:E8F15D3D DCB 0x79 ; y libumejni.so:E8F15D3E DCB 0xE7 libumejni.so:E8F15D3F DCB 0xC8 libumejni.so:E8F15D40 DCB 0x37 ; 7 libumejni.so:E8F15D41 DCB 0x6D ; m libumejni.so:E8F15D42 DCB 0x8D libumejni.so:E8F15D43 DCB 0xD5 libumejni.so:E8F15D44 DCB 0x4E ; N libumejni.so:E8F15D45 DCB 0xA9 libumejni.so:E8F15D46 DCB 0x6C ; l libumejni.so:E8F15D47 DCB 0x56 ; V libumejni.so:E8F15D48 DCB 0xF4 libumejni.so:E8F15D49 DCB 0xEA libumejni.so:E8F15D4A DCB 0x65 ; e libumejni.so:E8F15D4B DCB 0x7A ; z libumejni.so:E8F15D4C DCB 0xAE libumejni.so:E8F15D4D DCB 8 libumejni.so:E8F15D4E DCB 0xBA libumejni.so:E8F15D4F DCB 0x78 ; x libumejni.so:E8F15D50 DCB 0x25 ; % libumejni.so:E8F15D51 DCB 0x2E ; . libumejni.so:E8F15D52 DCB 0x1C libumejni.so:E8F15D53 DCB 0xA6 libumejni.so:E8F15D54 DCB 0xB4 libumejni.so:E8F15D55 DCB 0xC6 libumejni.so:E8F15D56 DCB 0xE8 libumejni.so:E8F15D57 DCB 0xDD libumejni.so:E8F15D58 DCB 0x74 ; t libumejni.so:E8F15D59 DCB 0x1F libumejni.so:E8F15D5A DCB 0x4B ; K libumejni.so:E8F15D5B DCB 0xBD libumejni.so:E8F15D5C DCB 0x8B libumejni.so:E8F15D5D DCB 0x8A libumejni.so:E8F15D5E DCB 0x70 ; p libumejni.so:E8F15D5F DCB 0x3E ; > libumejni.so:E8F15D60 DCB 0xB5 libumejni.so:E8F15D61 DCB 0x66 ; f libumejni.so:E8F15D62 DCB 0x48 ; H libumejni.so:E8F15D63 DCB 3 libumejni.so:E8F15D64 DCB 0xF6 libumejni.so:E8F15D65 DCB 0xE libumejni.so:E8F15D66 DCB 0x61 ; a libumejni.so:E8F15D67 DCB 0x35 ; 5 libumejni.so:E8F15D68 DCB 0x57 ; W libumejni.so:E8F15D69 DCB 0xB9 libumejni.so:E8F15D6A DCB 0x86 libumejni.so:E8F15D6B DCB 0xC1 libumejni.so:E8F15D6C DCB 0x1D libumejni.so:E8F15D6D DCB 0x9E libumejni.so:E8F15D6E DCB 0xE1 libumejni.so:E8F15D6F DCB 0xF8 libumejni.so:E8F15D70 DCB 0x98 libumejni.so:E8F15D71 DCB 0x11 libumejni.so:E8F15D72 DCB 0x69 ; i libumejni.so:E8F15D73 DCB 0xD9 libumejni.so:E8F15D74 DCB 0x8E libumejni.so:E8F15D75 DCB 0x94 libumejni.so:E8F15D76 DCB 0x9B libumejni.so:E8F15D77 DCB 0x1E libumejni.so:E8F15D78 DCB 0x87 libumejni.so:E8F15D79 DCB 0xE9 libumejni.so:E8F15D7A DCB 0xCE libumejni.so:E8F15D7B DCB 0x55 ; U libumejni.so:E8F15D7C DCB 0x28 ; ( libumejni.so:E8F15D7D DCB 0xDF libumejni.so:E8F15D7E DCB 0x8C libumejni.so:E8F15D7F DCB 0xA1 libumejni.so:E8F15D80 DCB 0x89 libumejni.so:E8F15D81 DCB 0xD libumejni.so:E8F15D82 DCB 0xBF libumejni.so:E8F15D83 DCB 0xE6 libumejni.so:E8F15D84 DCB 0x42 ; B libumejni.so:E8F15D85 DCB 0x68 ; h libumejni.so:E8F15D86 DCB 0x41 ; A libumejni.so:E8F15D87 DCB 0x99 libumejni.so:E8F15D88 DCB 0x2D ; - libumejni.so:E8F15D89 DCB 0xF libumejni.so:E8F15D8A DCB 0xB0 libumejni.so:E8F15D8B DCB 0x54 ; T libumejni.so:E8F15D8C DCB 0xBB libumejni.so:E8F15D8D DCB 0x16 libumejni.so:E8F15D8E unk_E8F15D8E ; DATA XREF: sub_E8F1126C+58↑o libumejni.so:E8F15D8E DCB 0x8D ; libumejni.so:off_E8F115F4↑o ... libumejni.so:E8F15D8F DCB 1 libumejni.so:E8F15D90 DCB 2 libumejni.so:E8F15D91 DCB 4 libumejni.so:E8F15D92 DCB 8 libumejni.so:E8F15D93 DCB 0x10 libumejni.so:E8F15D94 DCB 0x20 libumejni.so:E8F15D95 DCB 0x40 ; @ libumejni.so:E8F15D96 DCB 0x80 libumejni.so:E8F15D97 DCB 0x1B libumejni.so:E8F15D98 DCB 0x36 ; 6 libumejni.so:E8F15D99 DCB 0x6C ; l libumejni.so:E8F15D9A DCB 0xD8 libumejni.so:E8F15D9B DCB 0xAB libumejni.so:E8F15D9C DCB 0x4D ; M libumejni.so:E8F15D9D DCB 0x9A libumejni.so:E8F15D9E DCB 0x2F ; / libumejni.so:E8F15D9F DCB 0x5E ; ^ libumejni.so:E8F15DA0 DCB 0xBC libumejni.so:E8F15DA1 DCB 0x63 ; c libumejni.so:E8F15DA2 DCB 0xC6 libumejni.so:E8F15DA3 DCB 0x97 libumejni.so:E8F15DA4 DCB 0x35 ; 5 libumejni.so:E8F15DA5 DCB 0x6A ; j libumejni.so:E8F15DA6 DCB 0xD4 libumejni.so:E8F15DA7 DCB 0xB3 libumejni.so:E8F15DA8 DCB 0x7D ; } libumejni.so:E8F15DA9 DCB 0xFA libumejni.so:E8F15DAA DCB 0xEF libumejni.so:E8F15DAB DCB 0xC5 libumejni.so:E8F15DAC DCB 0x91 libumejni.so:E8F15DAD DCB 0x39 ; 9 libumejni.so:E8F15DAE DCB 0x72 ; r libumejni.so:E8F15DAF DCB 0xE4 libumejni.so:E8F15DB0 DCB 0xD3 libumejni.so:E8F15DB1 DCB 0xBD libumejni.so:E8F15DB2 DCB 0x61 ; a libumejni.so:E8F15DB3 DCB 0xC2 libumejni.so:E8F15DB4 DCB 0x9F libumejni.so:E8F15DB5 DCB 0x25 ; % libumejni.so:E8F15DB6 DCB 0x4A ; J libumejni.so:E8F15DB7 DCB 0x94 libumejni.so:E8F15DB8 DCB 0x33 ; 3 libumejni.so:E8F15DB9 DCB 0x66 ; f libumejni.so:E8F15DBA DCB 0xCC libumejni.so:E8F15DBB DCB 0x83 libumejni.so:E8F15DBC DCB 0x1D libumejni.so:E8F15DBD DCB 0x3A ; : libumejni.so:E8F15DBE DCB 0x74 ; t libumejni.so:E8F15DBF DCB 0xE8 libumejni.so:E8F15DC0 DCB 0xCB libumejni.so:E8F15DC1 DCB 0x8D libumejni.so:E8F15DC2 DCB 1 libumejni.so:E8F15DC3 DCB 2 libumejni.so:E8F15DC4 DCB 4 libumejni.so:E8F15DC5 DCB 8 libumejni.so:E8F15DC6 DCB 0x10 libumejni.so:E8F15DC7 DCB 0x20 libumejni.so:E8F15DC8 DCB 0x40 ; @ libumejni.so:E8F15DC9 DCB 0x80 libumejni.so:E8F15DCA DCB 0x1B libumejni.so:E8F15DCB DCB 0x36 ; 6 libumejni.so:E8F15DCC DCB 0x6C ; l libumejni.so:E8F15DCD DCB 0xD8 libumejni.so:E8F15DCE DCB 0xAB libumejni.so:E8F15DCF DCB 0x4D ; M libumejni.so:E8F15DD0 DCB 0x9A libumejni.so:E8F15DD1 DCB 0x2F ; / libumejni.so:E8F15DD2 DCB 0x5E ; ^ libumejni.so:E8F15DD3 DCB 0xBC libumejni.so:E8F15DD4 DCB 0x63 ; c libumejni.so:E8F15DD5 DCB 0xC6 libumejni.so:E8F15DD6 DCB 0x97 libumejni.so:E8F15DD7 DCB 0x35 ; 5 libumejni.so:E8F15DD8 DCB 0x6A ; j libumejni.so:E8F15DD9 DCB 0xD4 libumejni.so:E8F15DDA DCB 0xB3 libumejni.so:E8F15DDB DCB 0x7D ; } libumejni.so:E8F15DDC DCB 0xFA libumejni.so:E8F15DDD DCB 0xEF libumejni.so:E8F15DDE DCB 0xC5 libumejni.so:E8F15DDF DCB 0x91 libumejni.so:E8F15DE0 DCB 0x39 ; 9 libumejni.so:E8F15DE1 DCB 0x72 ; r libumejni.so:E8F15DE2 DCB 0xE4 libumejni.so:E8F15DE3 DCB 0xD3 libumejni.so:E8F15DE4 DCB 0xBD libumejni.so:E8F15DE5 DCB 0x61 ; a libumejni.so:E8F15DE6 DCB 0xC2 libumejni.so:E8F15DE7 DCB 0x9F libumejni.so:E8F15DE8 DCB 0x25 ; % libumejni.so:E8F15DE9 DCB 0x4A ; J libumejni.so:E8F15DEA DCB 0x94 libumejni.so:E8F15DEB DCB 0x33 ; 3 libumejni.so:E8F15DEC DCB 0x66 ; f libumejni.so:E8F15DED DCB 0xCC libumejni.so:E8F15DEE DCB 0x83 libumejni.so:E8F15DEF DCB 0x1D libumejni.so:E8F15DF0 DCB 0x3A ; : libumejni.so:E8F15DF1 DCB 0x74 ; t libumejni.so:E8F15DF2 DCB 0xE8 libumejni.so:E8F15DF3 DCB 0xCB libumejni.so:E8F15DF4 DCB 0x8D libumejni.so:E8F15DF5 DCB 1 libumejni.so:E8F15DF6 DCB 2 libumejni.so:E8F15DF7 DCB 4 libumejni.so:E8F15DF8 DCB 8 libumejni.so:E8F15DF9 DCB 0x10 libumejni.so:E8F15DFA DCB 0x20 libumejni.so:E8F15DFB DCB 0x40 ; @ libumejni.so:E8F15DFC DCB 0x80 libumejni.so:E8F15DFD DCB 0x1B libumejni.so:E8F15DFE DCB 0x36 ; 6 libumejni.so:E8F15DFF DCB 0x6C ; l libumejni.so:E8F15E00 DCB 0xD8 libumejni.so:E8F15E01 DCB 0xAB libumejni.so:E8F15E02 DCB 0x4D ; M libumejni.so:E8F15E03 DCB 0x9A libumejni.so:E8F15E04 DCB 0x2F ; / libumejni.so:E8F15E05 DCB 0x5E ; ^ libumejni.so:E8F15E06 DCB 0xBC libumejni.so:E8F15E07 DCB 0x63 ; c libumejni.so:E8F15E08 DCB 0xC6 libumejni.so:E8F15E09 DCB 0x97 libumejni.so:E8F15E0A DCB 0x35 ; 5 libumejni.so:E8F15E0B DCB 0x6A ; j libumejni.so:E8F15E0C DCB 0xD4 libumejni.so:E8F15E0D DCB 0xB3 libumejni.so:E8F15E0E DCB 0x7D ; } libumejni.so:E8F15E0F DCB 0xFA libumejni.so:E8F15E10 DCB 0xEF libumejni.so:E8F15E11 DCB 0xC5 libumejni.so:E8F15E12 DCB 0x91 libumejni.so:E8F15E13 DCB 0x39 ; 9 libumejni.so:E8F15E14 DCB 0x72 ; r libumejni.so:E8F15E15 DCB 0xE4 libumejni.so:E8F15E16 DCB 0xD3 libumejni.so:E8F15E17 DCB 0xBD libumejni.so:E8F15E18 DCB 0x61 ; a libumejni.so:E8F15E19 DCB 0xC2 libumejni.so:E8F15E1A DCB 0x9F libumejni.so:E8F15E1B DCB 0x25 ; % libumejni.so:E8F15E1C DCB 0x4A ; J libumejni.so:E8F15E1D DCB 0x94 libumejni.so:E8F15E1E DCB 0x33 ; 3 libumejni.so:E8F15E1F DCB 0x66 ; f libumejni.so:E8F15E20 DCB 0xCC libumejni.so:E8F15E21 DCB 0x83 libumejni.so:E8F15E22 DCB 0x1D libumejni.so:E8F15E23 DCB 0x3A ; : libumejni.so:E8F15E24 DCB 0x74 ; t libumejni.so:E8F15E25 DCB 0xE8 libumejni.so:E8F15E26 DCB 0xCB libumejni.so:E8F15E27 DCB 0x8D libumejni.so:E8F15E28 DCB 1 libumejni.so:E8F15E29 DCB 2 libumejni.so:E8F15E2A DCB 4 libumejni.so:E8F15E2B DCB 8 libumejni.so:E8F15E2C DCB 0x10 libumejni.so:E8F15E2D DCB 0x20 libumejni.so:E8F15E2E DCB 0x40 ; @ libumejni.so:E8F15E2F DCB 0x80 libumejni.so:E8F15E30 DCB 0x1B libumejni.so:E8F15E31 DCB 0x36 ; 6 libumejni.so:E8F15E32 DCB 0x6C ; l libumejni.so:E8F15E33 DCB 0xD8 libumejni.so:E8F15E34 DCB 0xAB libumejni.so:E8F15E35 DCB 0x4D ; M libumejni.so:E8F15E36 DCB 0x9A libumejni.so:E8F15E37 DCB 0x2F ; / libumejni.so:E8F15E38 DCB 0x5E ; ^ libumejni.so:E8F15E39 DCB 0xBC libumejni.so:E8F15E3A DCB 0x63 ; c libumejni.so:E8F15E3B DCB 0xC6 libumejni.so:E8F15E3C DCB 0x97 libumejni.so:E8F15E3D DCB 0x35 ; 5 libumejni.so:E8F15E3E DCB 0x6A ; j libumejni.so:E8F15E3F DCB 0xD4 libumejni.so:E8F15E40 DCB 0xB3 libumejni.so:E8F15E41 DCB 0x7D ; } libumejni.so:E8F15E42 DCB 0xFA libumejni.so:E8F15E43 DCB 0xEF libumejni.so:E8F15E44 DCB 0xC5 libumejni.so:E8F15E45 DCB 0x91 libumejni.so:E8F15E46 DCB 0x39 ; 9 libumejni.so:E8F15E47 DCB 0x72 ; r libumejni.so:E8F15E48 DCB 0xE4 libumejni.so:E8F15E49 DCB 0xD3 libumejni.so:E8F15E4A DCB 0xBD libumejni.so:E8F15E4B DCB 0x61 ; a libumejni.so:E8F15E4C DCB 0xC2 libumejni.so:E8F15E4D DCB 0x9F libumejni.so:E8F15E4E DCB 0x25 ; % libumejni.so:E8F15E4F DCB 0x4A ; J libumejni.so:E8F15E50 DCB 0x94 libumejni.so:E8F15E51 DCB 0x33 ; 3 libumejni.so:E8F15E52 DCB 0x66 ; f libumejni.so:E8F15E53 DCB 0xCC libumejni.so:E8F15E54 DCB 0x83 libumejni.so:E8F15E55 DCB 0x1D libumejni.so:E8F15E56 DCB 0x3A ; : libumejni.so:E8F15E57 DCB 0x74 ; t libumejni.so:E8F15E58 DCB 0xE8 libumejni.so:E8F15E59 DCB 0xCB libumejni.so:E8F15E5A DCB 0x8D libumejni.so:E8F15E5B DCB 1 libumejni.so:E8F15E5C DCB 2 libumejni.so:E8F15E5D DCB 4 libumejni.so:E8F15E5E DCB 8 libumejni.so:E8F15E5F DCB 0x10 libumejni.so:E8F15E60 DCB 0x20 libumejni.so:E8F15E61 DCB 0x40 ; @ libumejni.so:E8F15E62 DCB 0x80 libumejni.so:E8F15E63 DCB 0x1B libumejni.so:E8F15E64 DCB 0x36 ; 6 libumejni.so:E8F15E65 DCB 0x6C ; l libumejni.so:E8F15E66 DCB 0xD8 libumejni.so:E8F15E67 DCB 0xAB libumejni.so:E8F15E68 DCB 0x4D ; M libumejni.so:E8F15E69 DCB 0x9A libumejni.so:E8F15E6A DCB 0x2F ; / libumejni.so:E8F15E6B DCB 0x5E ; ^ libumejni.so:E8F15E6C DCB 0xBC libumejni.so:E8F15E6D DCB 0x63 ; c libumejni.so:E8F15E6E DCB 0xC6 libumejni.so:E8F15E6F DCB 0x97 libumejni.so:E8F15E70 DCB 0x35 ; 5 libumejni.so:E8F15E71 DCB 0x6A ; j libumejni.so:E8F15E72 DCB 0xD4 libumejni.so:E8F15E73 DCB 0xB3 libumejni.so:E8F15E74 DCB 0x7D ; } libumejni.so:E8F15E75 DCB 0xFA libumejni.so:E8F15E76 DCB 0xEF libumejni.so:E8F15E77 DCB 0xC5 libumejni.so:E8F15E78 DCB 0x91 libumejni.so:E8F15E79 DCB 0x39 ; 9 libumejni.so:E8F15E7A DCB 0x72 ; r libumejni.so:E8F15E7B DCB 0xE4 libumejni.so:E8F15E7C DCB 0xD3 libumejni.so:E8F15E7D DCB 0xBD libumejni.so:E8F15E7E DCB 0x61 ; a libumejni.so:E8F15E7F DCB 0xC2 libumejni.so:E8F15E80 DCB 0x9F libumejni.so:E8F15E81 DCB 0x25 ; % libumejni.so:E8F15E82 DCB 0x4A ; J libumejni.so:E8F15E83 DCB 0x94 libumejni.so:E8F15E84 DCB 0x33 ; 3 libumejni.so:E8F15E85 DCB 0x66 ; f libumejni.so:E8F15E86 DCB 0xCC libumejni.so:E8F15E87 DCB 0x83 libumejni.so:E8F15E88 DCB 0x1D libumejni.so:E8F15E89 DCB 0x3A ; : libumejni.so:E8F15E8A DCB 0x74 ; t libumejni.so:E8F15E8B DCB 0xE8 libumejni.so:E8F15E8C DCB 0xCB
开始加密了
0xFB->0xE0
16个字节分4轮,每轮4个字节,每次加密一个字节,最终得到如下结果
[anon:libc_malloc]:DDEA7D60 DCB 0xE [anon:libc_malloc]:DDEA7D61 DCB 0x50 ; P [anon:libc_malloc]:DDEA7D62 DCB 0x2B ; + [anon:libc_malloc]:DDEA7D63 DCB 0x51 ; Q [anon:libc_malloc]:DDEA7D64 DCB 0x1A [anon:libc_malloc]:DDEA7D65 DCB 0x4C ; L [anon:libc_malloc]:DDEA7D66 DCB 0 [anon:libc_malloc]:DDEA7D67 DCB 0xB [anon:libc_malloc]:DDEA7D68 DCB 0x33 ; 3 [anon:libc_malloc]:DDEA7D69 DCB 0x37 ; 7 [anon:libc_malloc]:DDEA7D6A DCB 0x2D ; - [anon:libc_malloc]:DDEA7D6B DCB 0x3B ; ; [anon:libc_malloc]:DDEA7D6C DCB 0xD [anon:libc_malloc]:DDEA7D6D DCB 0x68 ; h [anon:libc_malloc]:DDEA7D6E DCB 0x5C ; \ [anon:libc_malloc]:DDEA7D6F DCB 0x6E ; n
在将16字节分4轮,每轮4个字节,使用cw字符集处理每次加密一个字节,最终得到如下结果。
[anon:libc_malloc]:DDEA7D60 DCB 0xAB [anon:libc_malloc]:DDEA7D61 DCB 0x53 ; S [anon:libc_malloc]:DDEA7D62 DCB 0xF1 [anon:libc_malloc]:DDEA7D63 DCB 0xD1 [anon:libc_malloc]:DDEA7D64 DCB 0xA2 [anon:libc_malloc]:DDEA7D65 DCB 0x29 ; ) [anon:libc_malloc]:DDEA7D66 DCB 0x63 ; c [anon:libc_malloc]:DDEA7D67 DCB 0x2B ; + [anon:libc_malloc]:DDEA7D68 DCB 0xC3 [anon:libc_malloc]:DDEA7D69 DCB 0x9A [anon:libc_malloc]:DDEA7D6A DCB 0xD8 [anon:libc_malloc]:DDEA7D6B DCB 0xE2 [anon:libc_malloc]:DDEA7D6C DCB 0xD7 [anon:libc_malloc]:DDEA7D6D DCB 0x45 ; E [anon:libc_malloc]:DDEA7D6E DCB 0x4A ; J [anon:libc_malloc]:DDEA7D6F DCB 0x9F
接着进入16字节交换位置逻辑,然后带着16字节,进入下面逻辑。
[anon:libc_malloc]:DDEA7D60 DCB 0xAB [anon:libc_malloc]:DDEA7D61 DCB 0x29 ; ) [anon:libc_malloc]:DDEA7D62 DCB 0xD8 [anon:libc_malloc]:DDEA7D63 DCB 0x9F [anon:libc_malloc]:DDEA7D64 DCB 0xA2 [anon:libc_malloc]:DDEA7D65 DCB 0x9A [anon:libc_malloc]:DDEA7D66 DCB 0x4A ; J [anon:libc_malloc]:DDEA7D67 DCB 0xD1 [anon:libc_malloc]:DDEA7D68 DCB 0xC3 [anon:libc_malloc]:DDEA7D69 DCB 0x45 ; E [anon:libc_malloc]:DDEA7D6A DCB 0xF1 [anon:libc_malloc]:DDEA7D6B DCB 0x2B ; + [anon:libc_malloc]:DDEA7D6C DCB 0xD7 [anon:libc_malloc]:DDEA7D6D DCB 0x53 ; S [anon:libc_malloc]:DDEA7D6E DCB 0x63 ; c [anon:libc_malloc]:DDEA7D6F DCB 0xE2
经过4轮,每次设置4个字节,得到结果如下:
[anon:libc_malloc]:DDEA7D60 DCB 0x71 ; q [anon:libc_malloc]:DDEA7D61 DCB 0x15 [anon:libc_malloc]:DDEA7D62 DCB 0x93 [anon:libc_malloc]:DDEA7D63 DCB 0x32 ; 2 [anon:libc_malloc]:DDEA7D64 DCB 0x71 ; q [anon:libc_malloc]:DDEA7D65 DCB 0x82 [anon:libc_malloc]:DDEA7D66 DCB 0xC4 [anon:libc_malloc]:DDEA7D67 DCB 0x94 [anon:libc_malloc]:DDEA7D68 DCB 0x88 [anon:libc_malloc]:DDEA7D69 DCB 0x6A ; j [anon:libc_malloc]:DDEA7D6A DCB 2 [anon:libc_malloc]:DDEA7D6B DCB 0xBC [anon:libc_malloc]:DDEA7D6C DCB 0xC1 [anon:libc_malloc]:DDEA7D6D DCB 0x36 ; 6 [anon:libc_malloc]:DDEA7D6E DCB 0x7F ; [anon:libc_malloc]:DDEA7D6F DCB 0x8D
逻辑代码如下:
libumejni.so:E8F10752 libumejni.so:E8F10752 loc_E8F10752 ; 进入大逻辑了? libumejni.so:E8F10752 LDR R0, =0x698 libumejni.so:E8F10754 ADD R0, SP libumejni.so:E8F10756 LDR R0, [R0] libumejni.so:E8F10758 PUSH {R0} ; r0=0x8C固定值 libumejni.so:E8F1075A POP {R2} libumejni.so:E8F1075C ADDS R2, #0x73 libumejni.so:E8F1075E ADDS R0, #0xD libumejni.so:E8F10760 EORS R0, R2 libumejni.so:E8F10762 LDR R5, =0x798 libumejni.so:E8F10764 ADD R5, SP libumejni.so:E8F10766 LDR R5, [R5] libumejni.so:E8F10768 LDR R1, =0x7C8 libumejni.so:E8F1076A ADD R1, SP libumejni.so:E8F1076C LDR R1, [R1] libumejni.so:E8F1076E LSLS R4, R1, #2 libumejni.so:E8F10770 LDRB R3, [R5,R4] libumejni.so:E8F10772 STR R4, [SP,#arg_1C] libumejni.so:E8F10774 PUSH {R5} libumejni.so:E8F10776 POP {R6} libumejni.so:E8F10778 STR R6, [SP,#arg_18] libumejni.so:E8F1077A STR R3, [SP,#arg_3D4] libumejni.so:E8F1077C PUSH {R3} libumejni.so:E8F1077E POP {R1} libumejni.so:E8F10780 ANDS R1, R0 libumejni.so:E8F10782 PUSH {R3} libumejni.so:E8F10784 POP {R5} libumejni.so:E8F10786 EORS R5, R2 libumejni.so:E8F10788 STR R5, [SP,#arg_3D0] libumejni.so:E8F1078A PUSH {R2} libumejni.so:E8F1078C POP {R3} libumejni.so:E8F1078E MOVS R2, #0x66 libumejni.so:E8F10790 MVNS R2, R2 libumejni.so:E8F10792 MOV R12, R3 libumejni.so:E8F10794 LDR R3, =0x644 libumejni.so:E8F10796 ADD R3, SP libumejni.so:E8F10798 STR R2, [R3] libumejni.so:E8F1079A PUSH {R5} libumejni.so:E8F1079C POP {R2} libumejni.so:E8F1079E LDR R5, =0x644 libumejni.so:E8F107A0 ADD R5, SP libumejni.so:E8F107A2 LDR R5, [R5] libumejni.so:E8F107A4 ANDS R2, R5 libumejni.so:E8F107A6 ORRS R2, R1 libumejni.so:E8F107A8 ADDS R1, R6, R4 libumejni.so:E8F107AA LDR R4, =0x648 libumejni.so:E8F107AC ADD R4, SP libumejni.so:E8F107AE STR R1, [R4] libumejni.so:E8F107B0 LDRB R6, [R1,#1] libumejni.so:E8F107B2 STR R6, [SP,#arg_24] libumejni.so:E8F107B4 ANDS R0, R6 libumejni.so:E8F107B6 PUSH {R6} libumejni.so:E8F107B8 POP {R1} libumejni.so:E8F107BA MOV R3, R12 libumejni.so:E8F107BC EORS R1, R3 libumejni.so:E8F107BE STR R1, [SP,#arg_20] libumejni.so:E8F107C0 ANDS R5, R1 libumejni.so:E8F107C2 ORRS R5, R0 libumejni.so:E8F107C4 EORS R5, R2 libumejni.so:E8F107C6 LDR R6, =0x644 libumejni.so:E8F107C8 ADD R6, SP libumejni.so:E8F107CA STR R5, [R6] libumejni.so:E8F107CC LDR R0, =0x698 libumejni.so:E8F107CE ADD R0, SP libumejni.so:E8F107D0 LDR R0, [R0] libumejni.so:E8F107D2 ADDS R0, #0x54 libumejni.so:E8F107D4 EORS R0, R3 libumejni.so:E8F107D6 PUSH {R5} libumejni.so:E8F107D8 POP {R1} libumejni.so:E8F107DA ANDS R1, R0 libumejni.so:E8F107DC PUSH {R5} libumejni.so:E8F107DE POP {R2} libumejni.so:E8F107E0 EORS R5, R3 libumejni.so:E8F107E2 LDR R6, =0x4C0 libumejni.so:E8F107E4 ADD R6, SP libumejni.so:E8F107E6 STR R5, [R6] libumejni.so:E8F107E8 MOVS R2, #0x1F libumejni.so:E8F107EA MVNS R4, R2 libumejni.so:E8F107EC PUSH {R5} libumejni.so:E8F107EE POP {R2} libumejni.so:E8F107F0 ANDS R2, R4 libumejni.so:E8F107F2 ORRS R2, R1 libumejni.so:E8F107F4 LDR R6, =0x648 libumejni.so:E8F107F6 ADD R6, SP libumejni.so:E8F107F8 LDR R6, [R6] libumejni.so:E8F107FA LDRB R1, [R6,#2] libumejni.so:E8F107FC STR R1, [SP,#arg_3C4] libumejni.so:E8F107FE ANDS R0, R1 libumejni.so:E8F10800 EORS R1, R3 libumejni.so:E8F10802 STR R1, [SP,#arg_3C0] libumejni.so:E8F10804 ANDS R4, R1 libumejni.so:E8F10806 ORRS R4, R0 libumejni.so:E8F10808 EORS R4, R2 libumejni.so:E8F1080A STR R4, [SP,#arg_2C] libumejni.so:E8F1080C MOVS R5, #0x59 libumejni.so:E8F1080E PUSH {R3} libumejni.so:E8F10810 POP {R0} libumejni.so:E8F10812 EORS R0, R5 libumejni.so:E8F10814 PUSH {R4} libumejni.so:E8F10816 POP {R1} libumejni.so:E8F10818 ANDS R1, R0 libumejni.so:E8F1081A EORS R4, R3 libumejni.so:E8F1081C STR R4, [SP,#arg_28] libumejni.so:E8F1081E PUSH {R4} libumejni.so:E8F10820 POP {R2} libumejni.so:E8F10822 ANDS R2, R5 libumejni.so:E8F10824 ORRS R2, R1 libumejni.so:E8F10826 LDRB R1, [R6,#3] libumejni.so:E8F10828 STR R1, [SP,#arg_3CC] libumejni.so:E8F1082A ANDS R0, R1 libumejni.so:E8F1082C LDR R4, =0x688 libumejni.so:E8F1082E ADD R4, SP libumejni.so:E8F10830 STR R3, [R4] libumejni.so:E8F10832 EORS R1, R3 libumejni.so:E8F10834 STR R1, [SP,#arg_3C8] libumejni.so:E8F10836 ANDS R5, R1 libumejni.so:E8F10838 ORRS R5, R0 libumejni.so:E8F1083A EORS R5, R2 libumejni.so:E8F1083C PUSH {R5} libumejni.so:E8F1083E POP {R0} libumejni.so:E8F10840 LDR R1, [SP,#arg_3D0] libumejni.so:E8F10842 ANDS R0, R1 libumejni.so:E8F10844 PUSH {R5} libumejni.so:E8F10846 POP {R2} libumejni.so:E8F10848 EORS R2, R3 libumejni.so:E8F1084A STR R2, [SP,#arg_14] libumejni.so:E8F1084C LDR R1, [SP,#arg_3D4] libumejni.so:E8F1084E ANDS R1, R2 libumejni.so:E8F10850 ORRS R1, R0 libumejni.so:E8F10852 MOVS R0, #0xFF libumejni.so:E8F10854 LDR R4, =0x4B8 libumejni.so:E8F10856 ADD R4, SP libumejni.so:E8F10858 STR R0, [R4] libumejni.so:E8F1085A LDR R2, =0x644 libumejni.so:E8F1085C ADD R2, SP libumejni.so:E8F1085E LDR R2, [R2] libumejni.so:E8F10860 ANDS R2, R0 libumejni.so:E8F10862 STR R2, [SP,#arg_10] libumejni.so:E8F10864 LSRS R0, R2, #7 libumejni.so:E8F10866 LDR R2, =0xC7B8B2AC libumejni.so:E8F10868 NEGS R6, R2 libumejni.so:E8F1086A SUBS R0, R6, R0 libumejni.so:E8F1086C ADDS R2, R0, R2 libumejni.so:E8F1086E LDR R6, =0x69C libumejni.so:E8F10870 ADD R6, SP libumejni.so:E8F10872 LDR R6, [R6] libumejni.so:E8F10874 ADDS R6, #0xE libumejni.so:E8F10876 MOVS R3, #0x1B libumejni.so:E8F10878 EORS R3, R6 libumejni.so:E8F1087A LDR R4, =0x4BC libumejni.so:E8F1087C ADD R4, SP libumejni.so:E8F1087E STR R3, [R4] libumejni.so:E8F10880 PUSH {R2} libumejni.so:E8F10882 POP {R0} libumejni.so:E8F10884 EORS R0, R3 libumejni.so:E8F10886 ANDS R0, R2 libumejni.so:E8F10888 LDR R2, =unk_1722011C libumejni.so:E8F1088A EORS R2, R6 libumejni.so:E8F1088C PUSH {R0} libumejni.so:E8F1088E POP {R3} libumejni.so:E8F10890 ANDS R3, R2 libumejni.so:E8F10892 EORS R0, R6 libumejni.so:E8F10894 STR R6, [SP,#arg_3BC] libumejni.so:E8F10896 MOVS R4, #0x1C libumejni.so:E8F10898 STR R4, [SP,#arg_C] libumejni.so:E8F1089A ANDS R0, R4 libumejni.so:E8F1089C ORRS R0, R3 libumejni.so:E8F1089E LDR R3, [SP,#arg_10] libumejni.so:E8F108A0 LSLS R4, R3, #1 libumejni.so:E8F108A2 ANDS R2, R4 libumejni.so:E8F108A4 EORS R4, R6 libumejni.so:E8F108A6 LDR R3, [SP,#arg_C] libumejni.so:E8F108A8 ANDS R4, R3 libumejni.so:E8F108AA ORRS R4, R2 libumejni.so:E8F108AC EORS R4, R0 libumejni.so:E8F108AE PUSH {R4} libumejni.so:E8F108B0 POP {R0} libumejni.so:E8F108B2 LDR R2, =0x688 libumejni.so:E8F108B4 ADD R2, SP libumejni.so:E8F108B6 LDR R2, [R2] libumejni.so:E8F108B8 EORS R0, R2 libumejni.so:E8F108BA ANDS R0, R1 libumejni.so:E8F108BC EORS R1, R2 libumejni.so:E8F108BE PUSH {R2} libumejni.so:E8F108C0 POP {R6} libumejni.so:E8F108C2 ANDS R1, R4 libumejni.so:E8F108C4 ORRS R1, R0 libumejni.so:E8F108C6 LDR R0, [SP,#arg_1C] libumejni.so:E8F108C8 LDR R2, [SP,#arg_18] libumejni.so:E8F108CA STRB R1, [R2,R0] libumejni.so:E8F108CC LDR R0, =0x698 libumejni.so:E8F108CE ADD R0, SP libumejni.so:E8F108D0 LDR R0, [R0] libumejni.so:E8F108D2 ADDS R0, #0x5A libumejni.so:E8F108D4 EORS R0, R6 libumejni.so:E8F108D6 ANDS R5, R0 libumejni.so:E8F108D8 MOVS R1, #0x19 libumejni.so:E8F108DA MVNS R1, R1 libumejni.so:E8F108DC LDR R2, [SP,#arg_14] libumejni.so:E8F108DE ANDS R2, R1 libumejni.so:E8F108E0 ORRS R2, R5 libumejni.so:E8F108E2 PUSH {R2} libumejni.so:E8F108E4 POP {R4} libumejni.so:E8F108E6 LDR R3, [SP,#arg_24] libumejni.so:E8F108E8 ANDS R0, R3 libumejni.so:E8F108EA LDR R2, [SP,#arg_20] libumejni.so:E8F108EC ANDS R1, R2 libumejni.so:E8F108EE ORRS R1, R0 libumejni.so:E8F108F0 EORS R1, R4 libumejni.so:E8F108F2 MOVS R0, #5 libumejni.so:E8F108F4 PUSH {R6} libumejni.so:E8F108F6 POP {R5} libumejni.so:E8F108F8 PUSH {R5} libumejni.so:E8F108FA POP {R4} libumejni.so:E8F108FC EORS R4, R0 libumejni.so:E8F108FE STR R4, [SP,#arg_1C] libumejni.so:E8F10900 PUSH {R0} libumejni.so:E8F10902 POP {R6} libumejni.so:E8F10904 STR R6, [SP,#arg_18] libumejni.so:E8F10906 PUSH {R1} libumejni.so:E8F10908 POP {R0} libumejni.so:E8F1090A ANDS R0, R4 libumejni.so:E8F1090C EORS R1, R5 libumejni.so:E8F1090E ANDS R1, R6 libumejni.so:E8F10910 ORRS R1, R0 libumejni.so:E8F10912 LDR R0, [SP,#arg_3C4] libumejni.so:E8F10914 ANDS R2, R0 libumejni.so:E8F10916 LDR R0, [SP,#arg_3C0] libumejni.so:E8F10918 ANDS R3, R0 libumejni.so:E8F1091A ORRS R3, R2 libumejni.so:E8F1091C LDR R0, =0x4B8 libumejni.so:E8F1091E ADD R0, SP libumejni.so:E8F10920 LDR R0, [R0] libumejni.so:E8F10922 ANDS R3, R0 libumejni.so:E8F10924 LSLS R4, R3, #1 libumejni.so:E8F10926 PUSH {R3} libumejni.so:E8F10928 POP {R5} libumejni.so:E8F1092A LDR R3, =0x5D866783 libumejni.so:E8F1092C LDR R2, [SP,#arg_3BC] libumejni.so:E8F1092E EORS R3, R2 libumejni.so:E8F10930 PUSH {R4} libumejni.so:E8F10932 POP {R0} libumejni.so:E8F10934 ANDS R0, R3 libumejni.so:E8F10936 EORS R4, R2 libumejni.so:E8F10938 MOVS R6, #0x83 libumejni.so:E8F1093A STR R6, [SP,#arg_20] libumejni.so:E8F1093C ANDS R4, R6 libumejni.so:E8F1093E ORRS R4, R0 libumejni.so:E8F10940 LSRS R0, R5, #7 libumejni.so:E8F10942 STR R0, [SP,#arg_24] libumejni.so:E8F10944 LDR R6, =0x42F7F125 libumejni.so:E8F10946 NEGS R0, R6 libumejni.so:E8F10948 LDR R5, [SP,#arg_24] libumejni.so:E8F1094A SUBS R0, R0, R5 libumejni.so:E8F1094C ADDS R5, R0, R6 libumejni.so:E8F1094E EORS R5, R2 libumejni.so:E8F10950 LDR R0, =0x4BC libumejni.so:E8F10952 ADD R0, SP libumejni.so:E8F10954 LDR R0, [R0] libumejni.so:E8F10956 ORRS R5, R0 libumejni.so:E8F10958 EORS R5, R2 libumejni.so:E8F1095A LDR R0, =unk_F3C6633F libumejni.so:E8F1095C ORRS R0, R2 libumejni.so:E8F1095E ANDS R0, R5 libumejni.so:E8F10960 ANDS R3, R0 libumejni.so:E8F10962 EORS R0, R2 libumejni.so:E8F10964 PUSH {R2} libumejni.so:E8F10966 POP {R5} libumejni.so:E8F10968 LDR R2, [SP,#arg_20] libumejni.so:E8F1096A ANDS R0, R2 libumejni.so:E8F1096C ORRS R0, R3 libumejni.so:E8F1096E EORS R0, R4 libumejni.so:E8F10970 LDR R3, [SP,#arg_1C] libumejni.so:E8F10972 ANDS R3, R0 libumejni.so:E8F10974 LDR R2, =0x688 libumejni.so:E8F10976 ADD R2, SP libumejni.so:E8F10978 LDR R2, [R2] libumejni.so:E8F1097A EORS R0, R2 libumejni.so:E8F1097C LDR R2, [SP,#arg_18] libumejni.so:E8F1097E ANDS R0, R2 libumejni.so:E8F10980 ORRS R0, R3 libumejni.so:E8F10982 EORS R0, R1 libumejni.so:E8F10984 LDR R1, =0x648 libumejni.so:E8F10986 ADD R1, SP libumejni.so:E8F10988 LDR R1, [R1] libumejni.so:E8F1098A STRB R0, [R1,#1] libumejni.so:E8F1098C LDR R0, [SP,#arg_3CC] libumejni.so:E8F1098E LDR R1, [SP,#arg_3C0] libumejni.so:E8F10990 ANDS R1, R0 libumejni.so:E8F10992 LDR R0, [SP,#arg_3C8] libumejni.so:E8F10994 LDR R2, [SP,#arg_3C4] libumejni.so:E8F10996 ANDS R2, R0 libumejni.so:E8F10998 ORRS R2, R1 libumejni.so:E8F1099A LDR R0, =0x4B8 libumejni.so:E8F1099C ADD R0, SP libumejni.so:E8F1099E LDR R0, [R0] libumejni.so:E8F109A0 ANDS R2, R0 libumejni.so:E8F109A2 LSLS R1, R2, #1 libumejni.so:E8F109A4 PUSH {R2} libumejni.so:E8F109A6 POP {R4} libumejni.so:E8F109A8 LDR R2, =0x6E6D25EE libumejni.so:E8F109AA PUSH {R5} libumejni.so:E8F109AC POP {R3} libumejni.so:E8F109AE EORS R2, R3 libumejni.so:E8F109B0 PUSH {R1} libumejni.so:E8F109B2 POP {R0} libumejni.so:E8F109B4 ANDS R0, R2 libumejni.so:E8F109B6 EORS R1, R3 libumejni.so:E8F109B8 PUSH {R3} libumejni.so:E8F109BA POP {R6} libumejni.so:E8F109BC MOVS R3, #0xEE libumejni.so:E8F109BE ANDS R1, R3 libumejni.so:E8F109C0 ORRS R1, R0 libumejni.so:E8F109C2 LSRS R0, R4, #7 libumejni.so:E8F109C4 LDR R4, =0x5A5E028F libumejni.so:E8F109C6 NEGS R5, R4 libumejni.so:E8F109C8 SUBS R0, R5, R0 libumejni.so:E8F109CA ADDS R4, R0, R4 libumejni.so:E8F109CC PUSH {R6} libumejni.so:E8F109CE POP {R5} libumejni.so:E8F109D0 EORS R4, R5 libumejni.so:E8F109D2 LDR R0, =0x4BC libumejni.so:E8F109D4 ADD R0, SP libumejni.so:E8F109D6 LDR R0, [R0] libumejni.so:E8F109D8 ORRS R4, R0 libumejni.so:E8F109DA EORS R4, R5 libumejni.so:E8F109DC LDR R0, =0x6CFB1414 libumejni.so:E8F109DE ORRS R0, R5 libumejni.so:E8F109E0 ANDS R0, R4 libumejni.so:E8F109E2 ANDS R2, R0 libumejni.so:E8F109E4 EORS R0, R5 libumejni.so:E8F109E6 ANDS R0, R3 libumejni.so:E8F109E8 ORRS R0, R2 libumejni.so:E8F109EA EORS R0, R1 libumejni.so:E8F109EC MOVS R6, #0x4E libumejni.so:E8F109EE LDR R1, =0x688 libumejni.so:E8F109F0 ADD R1, SP libumejni.so:E8F109F2 LDR R1, [R1] libumejni.so:E8F109F4 PUSH {R1} libumejni.so:E8F109F6 POP {R2} libumejni.so:E8F109F8 EORS R2, R6 libumejni.so:E8F109FA PUSH {R0} libumejni.so:E8F109FC POP {R3} libumejni.so:E8F109FE ANDS R3, R2 libumejni.so:E8F10A00 EORS R0, R1 libumejni.so:E8F10A02 ANDS R0, R6 libumejni.so:E8F10A04 ORRS R0, R3 libumejni.so:E8F10A06 LDR R4, =0x698 libumejni.so:E8F10A08 ADD R4, SP libumejni.so:E8F10A0A LDR R4, [R4] libumejni.so:E8F10A0C ADDS R4, #0x1D libumejni.so:E8F10A0E EORS R4, R1 libumejni.so:E8F10A10 LDR R1, =0x644 libumejni.so:E8F10A12 ADD R1, SP libumejni.so:E8F10A14 LDR R1, [R1] libumejni.so:E8F10A16 ANDS R1, R4 libumejni.so:E8F10A18 MOVS R3, #0x56 libumejni.so:E8F10A1A MVNS R3, R3 libumejni.so:E8F10A1C LDR R5, =0x4C0 libumejni.so:E8F10A1E ADD R5, SP libumejni.so:E8F10A20 LDR R5, [R5] libumejni.so:E8F10A22 ANDS R5, R3 libumejni.so:E8F10A24 ORRS R5, R1 libumejni.so:E8F10A26 LDR R1, =0x4C0 libumejni.so:E8F10A28 ADD R1, SP libumejni.so:E8F10A2A STR R5, [R1] libumejni.so:E8F10A2C LDR R1, [SP,#arg_3CC] libumejni.so:E8F10A2E ANDS R4, R1 libumejni.so:E8F10A30 LDR R5, [SP,#arg_3C8] libumejni.so:E8F10A32 ANDS R3, R5 libumejni.so:E8F10A34 ORRS R3, R4 libumejni.so:E8F10A36 LDR R4, =0x4C0 libumejni.so:E8F10A38 ADD R4, SP libumejni.so:E8F10A3A LDR R4, [R4] libumejni.so:E8F10A3C EORS R3, R4 libumejni.so:E8F10A3E ANDS R2, R3 libumejni.so:E8F10A40 LDR R4, =0x688 libumejni.so:E8F10A42 ADD R4, SP libumejni.so:E8F10A44 LDR R4, [R4] libumejni.so:E8F10A46 EORS R3, R4 libumejni.so:E8F10A48 ANDS R3, R6 libumejni.so:E8F10A4A ORRS R3, R2 libumejni.so:E8F10A4C EORS R3, R0 libumejni.so:E8F10A4E LDR R0, =0x648 libumejni.so:E8F10A50 ADD R0, SP libumejni.so:E8F10A52 LDR R0, [R0] libumejni.so:E8F10A54 STRB R3, [R0,#2] libumejni.so:E8F10A56 LDR R0, [SP,#arg_3D0] libumejni.so:E8F10A58 ANDS R0, R1 libumejni.so:E8F10A5A LDR R1, [SP,#arg_3D4] libumejni.so:E8F10A5C ANDS R5, R1 libumejni.so:E8F10A5E ORRS R5, R0 libumejni.so:E8F10A60 LDR R0, =0x4B8 libumejni.so:E8F10A62 ADD R0, SP libumejni.so:E8F10A64 LDR R0, [R0] libumejni.so:E8F10A66 ANDS R5, R0 libumejni.so:E8F10A68 LSLS R0, R5, #1 libumejni.so:E8F10A6A PUSH {R5} libumejni.so:E8F10A6C POP {R4} libumejni.so:E8F10A6E LDR R2, =0xB8039EE9 libumejni.so:E8F10A70 LDR R5, [SP,#arg_3BC] libumejni.so:E8F10A72 EORS R2, R5 libumejni.so:E8F10A74 PUSH {R0} libumejni.so:E8F10A76 POP {R1} libumejni.so:E8F10A78 ANDS R1, R2 libumejni.so:E8F10A7A EORS R0, R5 libumejni.so:E8F10A7C MOVS R3, #0xE9 libumejni.so:E8F10A7E ANDS R0, R3 libumejni.so:E8F10A80 ORRS R0, R1 libumejni.so:E8F10A82 LSRS R1, R4, #7 libumejni.so:E8F10A84 NEGS R4, R1 libumejni.so:E8F10A86 EORS R4, R5 libumejni.so:E8F10A88 LDR R1, =0x4BC libumejni.so:E8F10A8A ADD R1, SP libumejni.so:E8F10A8C LDR R1, [R1] libumejni.so:E8F10A8E ORRS R4, R1 libumejni.so:E8F10A90 EORS R4, R5 libumejni.so:E8F10A92 LDR R1, =unk_22A3B1E6 libumejni.so:E8F10A94 ORRS R1, R5 libumejni.so:E8F10A96 ANDS R1, R4 libumejni.so:E8F10A98 ANDS R2, R1 libumejni.so:E8F10A9A EORS R1, R5 libumejni.so:E8F10A9C ANDS R1, R3 libumejni.so:E8F10A9E ORRS R1, R2 libumejni.so:E8F10AA0 EORS R1, R0 libumejni.so:E8F10AA2 LDR R0, =0x698 libumejni.so:E8F10AA4 ADD R0, SP libumejni.so:E8F10AA6 LDR R0, [R0] libumejni.so:E8F10AA8 ADDS R0, #0x21 libumejni.so:E8F10AAA LDR R3, =0x688 libumejni.so:E8F10AAC ADD R3, SP libumejni.so:E8F10AAE LDR R3, [R3] libumejni.so:E8F10AB0 EORS R0, R3 libumejni.so:E8F10AB2 PUSH {R1} libumejni.so:E8F10AB4 POP {R2} libumejni.so:E8F10AB6 ANDS R2, R0 libumejni.so:E8F10AB8 EORS R1, R3 libumejni.so:E8F10ABA MOVS R3, #0xAD libumejni.so:E8F10ABC ANDS R1, R3 libumejni.so:E8F10ABE ORRS R1, R2 libumejni.so:E8F10AC0 LDR R2, [SP,#arg_2C] libumejni.so:E8F10AC2 ANDS R0, R2 libumejni.so:E8F10AC4 LDR R2, [SP,#arg_28] libumejni.so:E8F10AC6 ANDS R2, R3 libumejni.so:E8F10AC8 ORRS R2, R0 libumejni.so:E8F10ACA EORS R2, R1 libumejni.so:E8F10ACC LDR R0, =0x648 libumejni.so:E8F10ACE ADD R0, SP libumejni.so:E8F10AD0 LDR R0, [R0] libumejni.so:E8F10AD2 STRB R2, [R0,#3] libumejni.so:E8F10AD4 LDR R0, =0x8B4 libumejni.so:E8F10AD6 ADD R0, SP libumejni.so:E8F10AD8 LDR R0, [R0] libumejni.so:E8F10ADA ADDS R0, #1 libumejni.so:E8F10ADC BL loc_E8F12E5E libumejni.so:E8F10ADC ; End of function sub_E8F10734 libumejni.so:E8F10ADC
在经过urg176,分4轮,每轮一个字节进行处理后得到如下结果:
[anon:libc_malloc]:DDEA7D60 DCB 0xD3 [anon:libc_malloc]:DDEA7D61 DCB 0x54 ; T [anon:libc_malloc]:DDEA7D62 DCB 0xFD [anon:libc_malloc]:DDEA7D63 DCB 0x47 ; G [anon:libc_malloc]:DDEA7D64 DCB 0xBA [anon:libc_malloc]:DDEA7D65 DCB 0xFB [anon:libc_malloc]:DDEA7D66 DCB 0xF8 [anon:libc_malloc]:DDEA7D67 DCB 0x8F [anon:libc_malloc]:DDEA7D68 DCB 1 [anon:libc_malloc]:DDEA7D69 DCB 0x70 ; p [anon:libc_malloc]:DDEA7D6A DCB 0x7A ; z [anon:libc_malloc]:DDEA7D6B DCB 0xF1 [anon:libc_malloc]:DDEA7D6C DCB 0x20 [anon:libc_malloc]:DDEA7D6D DCB 0x66 ; f [anon:libc_malloc]:DDEA7D6E DCB 0x61 ; a [anon:libc_malloc]:DDEA7D6F DCB 0x8C
接着又进行cw逻辑,明文16字节处理,得到如下结果:
[anon:libc_malloc]:DDEA7D60 DCB 0x66 ; f [anon:libc_malloc]:DDEA7D61 DCB 0x20 [anon:libc_malloc]:DDEA7D62 DCB 0x54 ; T [anon:libc_malloc]:DDEA7D63 DCB 0xA0 [anon:libc_malloc]:DDEA7D64 DCB 0xF4 [anon:libc_malloc]:DDEA7D65 DCB 0xF [anon:libc_malloc]:DDEA7D66 DCB 0x41 ; A [anon:libc_malloc]:DDEA7D67 DCB 0x73 ; s [anon:libc_malloc]:DDEA7D68 DCB 0x7C ; | [anon:libc_malloc]:DDEA7D69 DCB 0x51 ; Q [anon:libc_malloc]:DDEA7D6A DCB 0xDA [anon:libc_malloc]:DDEA7D6B DCB 0xA1 [anon:libc_malloc]:DDEA7D6C DCB 0xB7 [anon:libc_malloc]:DDEA7D6D DCB 0x33 ; 3 [anon:libc_malloc]:DDEA7D6E DCB 0xEF [anon:libc_malloc]:DDEA7D6F DCB 0x64 ; d
接着又进入swap交换逻辑
经过10轮后,又进入新的10轮。
开始encodecw,然后swap,这两个逻辑跟前面是相同的。但是到了encode4bytes的时候,发现具体逻辑不一样了
代码如下
libumejni.so:E8F13FE8 sub_E8F13FE8 libumejni.so:E8F13FE8 LDR R0, =0x7E8 libumejni.so:E8F13FEA ADD R0, SP libumejni.so:E8F13FEC LDR R0, [R0] libumejni.so:E8F13FEE LSLS R0, R0, #2 libumejni.so:E8F13FF0 LDR R1, =0xD7A889A libumejni.so:E8F13FF2 SUBS R0, R0, R1 libumejni.so:E8F13FF4 ADDS R0, #0xA0 libumejni.so:E8F13FF6 ADDS R0, R0, R1 libumejni.so:E8F13FF8 LDR R1, =0x7EC libumejni.so:E8F13FFA ADD R1, SP libumejni.so:E8F13FFC LDR R1, [R1] libumejni.so:E8F13FFE NEGS R1, R1 libumejni.so:E8F14000 SUBS R0, R1, R0 libumejni.so:E8F14002 LDR R1, =0x9C0 libumejni.so:E8F14004 ADD R1, SP libumejni.so:E8F14006 SUBS R0, R1, R0 libumejni.so:E8F14008 LDRB R1, [R0] libumejni.so:E8F1400A LDR R0, =0x698 libumejni.so:E8F1400C ADD R0, SP libumejni.so:E8F1400E LDR R0, [R0] libumejni.so:E8F14010 ADDS R0, #0x73 libumejni.so:E8F14012 PUSH {R1} libumejni.so:E8F14014 POP {R2} libumejni.so:E8F14016 EORS R2, R0 libumejni.so:E8F14018 LDR R3, =0x798 libumejni.so:E8F1401A ADD R3, SP libumejni.so:E8F1401C LDR R3, [R3] libumejni.so:E8F1401E LDR R4, =0x7E8 libumejni.so:E8F14020 ADD R4, SP libumejni.so:E8F14022 LDR R4, [R4] libumejni.so:E8F14024 LSLS R4, R4, #2 libumejni.so:E8F14026 ADDS R3, R3, R4 libumejni.so:E8F14028 LDR R4, =0x7EC libumejni.so:E8F1402A ADD R4, SP libumejni.so:E8F1402C LDR R4, [R4] libumejni.so:E8F1402E LDRB R5, [R3,R4] libumejni.so:E8F14030 ANDS R2, R5 libumejni.so:E8F14032 EORS R0, R5 libumejni.so:E8F14034 ANDS R0, R1 libumejni.so:E8F14036 ORRS R0, R2 libumejni.so:E8F14038 STRB R0, [R3,R4] libumejni.so:E8F1403A LDR R0, =0x8CC libumejni.so:E8F1403C ADD R0, SP libumejni.so:E8F1403E LDR R0, [R0] libumejni.so:E8F14040 NEGS R0, R0 libumejni.so:E8F14042 MOVS R1, #1 libumejni.so:E8F14044 SUBS
所有明文分成16字节处理完后
[anon:libc_malloc]:DBB29630 DCB 0x75 ; u [anon:libc_malloc]:DBB29631 DCB 0x72 ; r [anon:libc_malloc]:DBB29632 DCB 0x47 ; G [anon:libc_malloc]:DBB29633 DCB 0x30 ; 0 [anon:libc_malloc]:DBB29634 DCB 0x69 ; i [anon:libc_malloc]:DBB29635 DCB 0x38 ; 8
接着进入这个逻辑,应该是用urG0i8跟明文中间结果进行处理。
可能是3转4的操作,这个逻辑是取明文3个自己。
libumejni.so:E8F14548 sub_E8F14548 libumejni.so:E8F14548 libumejni.so:E8F14548 arg_26C= 0x26C libumejni.so:E8F14548 arg_270= 0x270 libumejni.so:E8F14548 libumejni.so:E8F14548 LDR R0, =0x8E0 libumejni.so:E8F1454A ADD R0, SP libumejni.so:E8F1454C LDR R0, [R0] ; 指向明文地址 libumejni.so:E8F1454E ADDS R0, #1 libumejni.so:E8F14550 LDR R4, =0x80C libumejni.so:E8F14552 ADD R4, SP libumejni.so:E8F14554 STR R0, [R4] libumejni.so:E8F14556 LDR R0, =0x8E0 libumejni.so:E8F14558 ADD R0, SP libumejni.so:E8F1455A LDR R0, [R0] libumejni.so:E8F1455C LDRB R0, [R0] libumejni.so:E8F1455E LDR R1, =0x8D8 libumejni.so:E8F14560 ADD R1, SP libumejni.so:E8F14562 LDR R1, [R1] libumejni.so:E8F14564 NEGS R2, R1 libumejni.so:E8F14566 MOVS R1, #1 libumejni.so:E8F14568 SUBS R2, R1, R2 libumejni.so:E8F1456A LDR R4, =0x810 libumejni.so:E8F1456C ADD R4, SP libumejni.so:E8F1456E STR R2, [R4] libumejni.so:E8F14570 LDR R2, =0x918 libumejni.so:E8F14572 ADD R2, SP libumejni.so:E8F14574 LDR R3, =0x8D8 libumejni.so:E8F14576 ADD R3, SP libumejni.so:E8F14578 LDR R3, [R3] libumejni.so:E8F1457A STRB R0, [R2,R3] libumejni.so:E8F1457C MOVS R0, #0 libumejni.so:E8F1457E LDR R2, =0x810 libumejni.so:E8F14580 ADD R2, SP libumejni.so:E8F14582 LDR R2, [R2] libumejni.so:E8F14584 CMP R2, #3 libumejni.so:E8F14586 PUSH {R1} libumejni.so:E8F14588 POP {R2} libumejni.so:E8F1458A BEQ
带着明文取出的3个字节,进入3转4逻辑
第一组3个字节得到如下结果
FB 12 DF
[stack]:FFAA1A94 DCB 0x3E ; > [stack]:FFAA1A95 DCB 0x31 ; 1 [stack]:FFAA1A96 DCB 0xB [stack]:FFAA1A97 DCB 0x1F libumejni.so:E8F1251C sub_E8F1251C libumejni.so:E8F1251C libumejni.so:E8F1251C ; FUNCTION CHUNK AT libumejni.so:E8F153E0 SIZE 00000008 BYTES libumejni.so:E8F1251C libumejni.so:E8F1251C LDR R1, =0x918 libumejni.so:E8F1251E ADD R1, SP libumejni.so:E8F12520 LDRB R0, [R1] libumejni.so:E8F12522 PUSH {R1} libumejni.so:E8F12524 POP {R3} libumejni.so:E8F12526 LDR R5, =0x4C0 libumejni.so:E8F12528 ADD R5, SP libumejni.so:E8F1252A STR R3, [R5] libumejni.so:E8F1252C LSRS R1, R0, #2 libumejni.so:E8F1252E LDR R2, =0x91C libumejni.so:E8F12530 ADD R2, SP libumejni.so:E8F12532 LDR R5, =0x644 libumejni.so:E8F12534 ADD R5, SP libumejni.so:E8F12536 STR R2, [R5] libumejni.so:E8F12538 STRB R1, [R2] libumejni.so:E8F1253A LDR R2, =0x698 libumejni.so:E8F1253C ADD R2, SP libumejni.so:E8F1253E LDR R2, [R2] libumejni.so:E8F12540 ADDS R2, #0x73 libumejni.so:E8F12542 LDR R5, =0x4D4 libumejni.so:E8F12544 ADD R5, SP libumejni.so:E8F12546 STR R2, [R5] libumejni.so:E8F12548 MOVS R1, #0x30 libumejni.so:E8F1254A EORS R1, R2 libumejni.so:E8F1254C LSLS R0, R0, #4 libumejni.so:E8F1254E EORS R0, R2 libumejni.so:E8F12550 ORRS R0, R1 libumejni.so:E8F12552 EORS R0, R2 libumejni.so:E8F12554 MOVS R4, #0x57 libumejni.so:E8F12556 ORRS R4, R2 libumejni.so:E8F12558 ANDS R4, R0 libumejni.so:E8F1255A MOVS R0, #0xFF libumejni.so:E8F1255C LDR R2, loc_E8F12934 libumejni.so:E8F1255E ADD R2, SP libumejni.so:E8F12560 STR R0, [R2] libumejni.so:E8F12562 ANDS R4, R0 libumejni.so:E8F12564 LDR R6, loc_E8F12938 libumejni.so:E8F12566 ADD R6, SP libumejni.so:E8F12568 LDR R6, [R6] libumejni.so:E8F1256A ADDS R6, #0xE libumejni.so:E8F1256C LDR R5, loc_E8F1293C libumejni.so:E8F1256E EORS R5, R6 libumejni.so:E8F12570 PUSH {R4} libumejni.so:E8F12572 POP {R0} libumejni.so:E8F12574 ANDS R0, R5 libumejni.so:E8F12576 EORS R4, R6 libumejni.so:E8F12578 MOVS R1, #0x5C libumejni.so:E8F1257A LDR R2, =0x688 libumejni.so:E8F1257C ADD R2, SP libumejni.so:E8F1257E STR R1, [R2] libumejni.so:E8F12580 PUSH {R4} libumejni.so:E8F12582 POP {R2} libumejni.so:E8F12584 ANDS R2, R1 libumejni.so:E8F12586 ORRS R2, R0 libumejni.so:E8F12588 LDRB R0, [R3,#1] libumejni.so:E8F1258A LDR R3, =0x4BC libumejni.so:E8F1258C ADD R3, SP libumejni.so:E8F1258E STR R0, [R3] libumejni.so:E8F12590 LSRS R0, R0, #4 libumejni.so:E8F12592 PUSH {R0} libumejni.so:E8F12594 POP {R1} libumejni.so:E8F12596 ANDS R1, R5 libumejni.so:E8F12598 LDR R3, =0x4B8 libumejni.so:E8F1259A ADD R3, SP libumejni.so:E8F1259C STR R1, [R3] libumejni.so:E8F1259E EORS R0, R6 libumejni.so:E8F125A0 PUSH {R0} libumejni.so:E8F125A2 POP {R1} libumejni.so:E8F125A4 LDR R3, =0x688 libumejni.so:E8F125A6 ADD R3, SP libumejni.so:E8F125A8 LDR R3, [R3] libumejni.so:E8F125AA ANDS R1, R3 libumejni.so:E8F125AC LDR R3, =0x4B8 libumejni.so:E8F125AE ADD R3, SP libumejni.so:E8F125B0 LDR R3, [R3] libumejni.so:E8F125B2 ORRS R1, R3 libumejni.so:E8F125B4 EORS R1, R2 libumejni.so:E8F125B6 ORRS R0, R4 libumejni.so:E8F125B8 EORS R0, R6 libumejni.so:E8F125BA LDR R2, =0x688 libumejni.so:E8F125BC ADD R2, SP libumejni.so:E8F125BE LDR R2, [R2] libumejni.so:E8F125C0 ORRS R5, R2 libumejni.so:E8F125C2 ANDS R5, R0 libumejni.so:E8F125C4 ORRS R5, R1 libumejni.so:E8F125C6 LDR R4, =0x644 libumejni.so:E8F125C8 ADD R4, SP libumejni.so:E8F125CA LDR R4, [R4] libumejni.so:E8F125CC STRB R5, [R4,#1] libumejni.so:E8F125CE MOVS R0, #0x3C libumejni.so:E8F125D0 LDR R2, =0x4D4 libumejni.so:E8F125D2 ADD R2, SP libumejni.so:E8F125D4 LDR R2, [R2] libumejni.so:E8F125D6 EORS R0, R2 libumejni.so:E8F125D8 LDR R1, =0x4BC libumejni.so:E8F125DA ADD R1, SP libumejni.so:E8F125DC LDR R1, [R1] libumejni.so:E8F125DE LSLS R1, R1, #2 libumejni.so:E8F125E0 EORS R1, R2 libumejni.so:E8F125E2 ORRS R1, R0 libumejni.so:E8F125E4 EORS R1, R2 libumejni.so:E8F125E6 LDR R3, =0x698 libumejni.so:E8F125E8 ADD R3, SP libumejni.so:E8F125EA LDR R3, [R3] libumejni.so:E8F125EC PUSH {R3} libumejni.so:E8F125EE POP {R0} libumejni.so:E8F125F0 EORS R0, R2 libumejni.so:E8F125F2 PUSH {R2} libumejni.so:E8F125F4 POP {R5} libumejni.so:E8F125F6 ORRS R0, R3 libumejni.so:E8F125F8 ANDS R0, R1 libumejni.so:E8F125FA LDR R1, =0x4D8 libumejni.so:E8F125FC ADD R1, SP libumejni.so:E8F125FE LDR R1, [R1] libumejni.so:E8F12600 ANDS R0, R1 libumejni.so:E8F12602 LDR R1, =0x4C0 libumejni.so:E8F12604 ADD R1, SP libumejni.so:E8F12606 LDR R1, [R1] libumejni.so:E8F12608 LDRB R1, [R1,#2] libumejni.so:E8F1260A LSRS R2, R1, #6 libumejni.so:E8F1260C PUSH {R0} libumejni.so:E8F1260E POP {R3} libumejni.so:E8F12610 EORS R3, R2 libumejni.so:E8F12612 ANDS R0, R2 libumejni.so:E8F12614 ORRS R0, R3 libumejni.so:E8F12616 PUSH {R4} libumejni.so:E8F12618 POP {R2} libumejni.so:E8F1261A STRB R0, [R2,#2] libumejni.so:E8F1261C EORS R5, R1 libumejni.so:E8F1261E MOVS R0, #0x3F libumejni.so:E8F12620 EORS R0, R5 libumejni.so:E8F12622 ANDS R0, R1 libumejni.so:E8F12624 STRB R0, [R2,#3] libumejni.so:E8F12626 LDR R1, =0x8D0 libumejni.so:E8F12628 ADD R1, SP libumejni.so:E8F1262A LDR R1, [R1] libumejni.so:E8F1262C LDR R0, =0x8D4 libumejni.so:E8F1262E ADD R0, SP libumejni.so:E8F12630 LDR R0, [R0] libumejni.so:E8F12632 ADDS R1, #4 libumejni.so:E8F12634 BL sub_E8F1573C libumejni.so:E8F12638 LDR R2, =0x818 libumejni.so:E8F1263A ADD R2, SP libumejni.so:E8F1263C STR R0, [R2] libumejni.so:E8F1263E MOVS R0, #0 libumejni.so:E8F12640 LDR R2, =0x4D4 libumejni.so:E8F12642 ADD R2, SP libumejni.so:E8F12644 STR R0, [R2] libumejni.so:E8F12646 LDR R0, =0x8D0 libumejni.so:E8F12648 ADD R0, SP libumejni.so:E8F1264A LDR R0, [R0] libumejni.so:E8F1264C LDR R2, =0x4D8 libumejni.so:E8F1264E ADD R2, SP libumejni.so:E8F12650 STR R0, [R2] libumejni.so:E8F12652 LDR R6, =0x494 libumejni.so:E8F12654 BL loc_E8F153E0 libumejni.so:E8F12654 ; End of function sub_E8F12
最后3转4不够3,补0的逻辑。
libumejni.so:E8F10CAA loc_E8F10CAA ; 3转4最后补0的逻辑 libumejni.so:E8F10CAA LDR R0, =0x918 libumejni.so:E8F10CAC ADD R0, SP libumejni.so:E8F10CAE LDRB R3, [R0] libumejni.so:E8F10CB0 PUSH {R0} libumejni.so:E8F10CB2 POP {R6} libumejni.so:E8F10CB4 LDR R5, =0x644 libumejni.so:E8F10CB6 ADD R5, SP libumejni.so:E8F10CB8 STR R6, [R5] libumejni.so:E8F10CBA LSRS R1, R3, #2 libumejni.so:E8F10CBC LDR R0, =0x91C libumejni.so:E8F10CBE ADD R0, SP libumejni.so:E8F10CC0 LDR R5, =0x688 libumejni.so:E8F10CC2 ADD R5, SP libumejni.so:E8F10CC4 STR R0, [R5] libumejni.so:E8F10CC6 STRB R1, [R0] libumejni.so:E8F10CC8 LDR R2, =0x698 libumejni.so:E8F10CCA ADD R2, SP libumejni.so:E8F10CCC LDR R2, [R2] libumejni.so:E8F10CCE PUSH {R2} libumejni.so:E8F10CD0 POP {R1} libumejni.so:E8F10CD2 ADDS R1, #0x73 libumejni.so:E8F10CD4 MOVS R4, #0x30 libumejni.so:E8F10CD6 EORS R4, R1 libumejni.so:E8F10CD8 LSLS R3, R3, #4 libumejni.so:E8F10CDA EORS R3, R1 libumejni.so:E8F10CDC ORRS R3, R4 libumejni.so:E8F10CDE EORS R3, R1 libumejni.so:E8F10CE0 PUSH {R2} libumejni.so:E8F10CE2 POP {R5} libumejni.so:E8F10CE4 ADDS R5, #0x5E libumejni.so:E8F10CE6 PUSH {R5} libumejni.so:E8F10CE8 POP {R4} libumejni.so:E8F10CEA EORS R4, R1 libumejni.so:E8F10CEC ORRS R4, R5 libumejni.so:E8F10CEE ANDS R4, R3 libumejni.so:E8F10CF0 MOVS R3, #0xFF libumejni.so:E8F10CF2 ANDS R4, R3 libumejni.so:E8F10CF4 LDRB R5, [R6,#1] libumejni.so:E8F10CF6 LSRS R0, R5, #4 libumejni.so:E8F10CF8 PUSH {R0} libumejni.so:E8F10CFA POP {R6} libumejni.so:E8F10CFC EORS R6, R4 libumejni.so:E8F10CFE ANDS R4, R0 libumejni.so:E8F10D00 ORRS R4, R6 libumejni.so:E8F10D02 LDR R6, =0x688 libumejni.so:E8F10D04 ADD R6, SP libumejni.so:E8F10D06 LDR R6, [R6] libumejni.so:E8F10D08 STRB R4, [R6,#1] libumejni.so:E8F10D0A MOVS R0, #0x3C libumejni.so:E8F10D0C EORS R0, R1 libumejni.so:E8F10D0E LSLS R4, R5, #2 libumejni.so:E8F10D10 EORS R4, R1 libumejni.so:E8F10D12 ORRS R4, R0 libumejni.so:E8F10D14 EORS R4, R1 libumejni.so:E8F10D16 ADDS R2, #0x57 libumejni.so:E8F10D18 PUSH {R2} libumejni.so:E8F10D1A POP {R5} libumejni.so:E8F10D1C EORS R5, R1 libumejni.so:E8F10D1E ORRS R5, R2 libumejni.so:E8F10D20 ANDS R5, R4 libumejni.so:E8F10D22 ANDS R5, R3 libumejni.so:E8F10D24 LDR R0, =0x644 libumejni.so:E8F10D26 ADD R0, SP libumejni.so:E8F10D28 LDR R0, [R0] libumejni.so:E8F10D2A LDRB R0, [R0,#2] libumejni.so:E8F10D2C LSRS R3, R0, #6 libumejni.so:E8F10D2E PUSH {R5} libumejni.so:E8F10D30 POP {R4} libumejni.so:E8F10D32 EORS R4, R3 libumejni.so:E8F10D34 ANDS R5, R3 libumejni.so:E8F10D36 ORRS R5, R4 libumejni.so:E8F10D38 PUSH {R6} libumejni.so:E8F10D3A POP {R2} libumejni.so:E8F10D3C STRB R5, [R2,#2] libumejni.so:E8F10D3E EORS R1, R0 libumejni.so:E8F10D40 MOVS R3, #0x3F libumejni.so:E8F10D42 EORS R3, R1 libumejni.so:E8F10D44 ANDS R3, R0 libumejni.so:E8F10D46 STRB R3, [R2,#3] libumejni.so:E8F10D48 LDR R0, [SP,#arg_80] libumejni.so:E8F10D4A LDR R2, [R0] libumejni.so:E8F10D4C MOVS R1, #1 libumejni.so:E8F10D4E MOVS R0, #0 libumejni.so:E8F10D50 CMP R2, #0xA libumejni.so:E8F10D52 PUSH {R1} libumejni.so:E8F10D54 POP {R2} libumejni.so:E8F10D56 BLT loc_E8
最终拓出代码,对明文加密
得到密文
与它app加密一样,至此加密分析完毕。
响应数据分析,通过内部代码分析,主体为json结构,详细数据为protobuf协议格式。
最终响应结果:
源代码
总结
说到底无论如何加密,最终都有被解密得可能,只是成本时间的问题,我也虽没经过系统学习,仅凭爱好也能分析出来,可想而知面对那些专业人士就是裸奔。
即便如此,我们更加要做好数据安全,至少把门槛提高了。