好友
阅读权限20
听众
最后登录1970-1-1
|
最近,在学习安卓逆向方面的知识,学着学着,就懵逼了,突然想到很早之前一个软件“”闪送app的签名校验“” 拿来练手,毕竟太笨了,得靠多练手,才熟悉,发这个帖子的目的也是增强记忆,学习的目的!惯例,第一步,先用签名工具,把app重新签名一次。打开
提示,被非法篡改的app。 在过这个签名校验的时候,也走了很多弯路,打开软件看ddms信息,没有看到任何关键信息,搜索signature 关键词获取签名信息 ,搜索出来很多信息,但是没有定位到关键点,走了很多弯路,始终找不到突破点,哎,脑阔大。
经过一段时间思索,考虑,犹豫,想到,程序是打开信息马上就弹出,错误的对话框 可以从andorid程序的入口点,入口界面入手
第一步打开神器 androidkiller 观察程序的入口点,跟入口界面,能不能给我点信息!
第一步,先熟悉一下,androidManifest package="com.ishansong" 第一行代码 ,为程序的包名
application 的name熟悉为程序入口点。我们第一步,就要从这里进行分析!
android:name="com.ishansong.RootApplication
在small代码里面找到 RootApplication 类,观察!
查看java代码,找不到任何的关键点信息,接着我们查看入口界面,拿出工具继续看androidkiller
<activity android:label="@string/app_name_launcher" android:name="com.ishansong.LoadingActivity" android:screenOrientation="portrait" android:theme="@android:style/Theme.Light.NoTitleBar">
<intent-filter>
<action android:name="android.intent.action.MAIN"/> 看MAIN 跟 LAUNCHER 两个在一起就是程序入口界面!
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
com.ishansong.LoadingActivity 就是入口界面,找到对应的类
打开查看!java代码,看到一个native‘方法调用,
点进去看看代码代码。
看到里面加载了一个,sscorellib so文件! 这时候我们就要想,程序在入口界面,加载这个so文件搞么子,然后祭出神器IDA 看看,这个so文件到底干了什么!
用360压缩,直接打开apk文件,到处里面 lib目录下面的 拖出来libssCoreLib.so
打开ida 把libssCoreLib 拖进去
直接查看导出函数表,我是直接在这里 ,ctrl+f 搜索关键词 signature ,也可以搜索字符串 然后查看交叉引用,同样也可以进入到关键位置
直接双击进入,
LDR R3, =(check_ptr - 0x18A4)
.text:0000189E PUSH {R4-R7,LR}
.text:000018A0 ADD R3, PC ; check_ptr
.text:000018A2 LDR R3, [R3] ; check
.text:000018A4 MOVS R2, #0
.text:000018A6 SUB SP, SP, #0x34
.text:000018A8 STR R2, [R3]
.text:000018AA LDR R3, =(aGetpackagename - 0x18B4)
.text:000018AC MOVS R4, R0
.text:000018AE STR R1, [SP,#0x48+var_30]
.text:000018B0 ADD R3, PC ; "getPackageName" 这里看出来是获取包名
.text:000018B2 STR R3, [SP,#0x48+var_48]
.text:000018B4 LDR R3, =(aLjavaLangStrin - 0x18BE)
.text:000018B6 ADD R1, SP, #0x48+var_28
代码太多,我就截取关键位置
ADD R3, PC ; "getPackageManager"
.text:00001926 STR R3, [SP,#0x48+var_48]
.text:00001928 LDR R3, =(aLandroidConten - 0x1932)
.text:0000192A MOVS R1, R4
.text:0000192C ADDS R2, #0x2F
.text:0000192E ADD R3, PC ; "()Landroid/content/pm/PackageManager; 获取包名信息
LDR R3, =(aLandroidCont_0 - 0x19C2)
.text:000019BA ADD R2, PC ; "signatures"
.text:000019BC MOVS R1, R6
.text:000019BE ADD R3, PC ; "[Landroid/content/pm/Signature;"
.text:000019C0 MOVS R0, R4
.text:000019C2 BLX R5
.text:000019C4 LDR R3, [R4]
.text:000019C6 MOVS R5, R0
.text:000019C8 ; 57: (*(*v1 + offsetof(JNINativeInterface, DeleteLocalRef)))(v1, v8);
.text:000019C8 MOVS R1, R6
.text:000019CA LDR R3, [R3,#JNINativeInterface.DeleteLocalRef]
.text:000019CC MOVS R0, R4
.text:000019CE BLX R3 //获取签名信息,
从上面这些关键词可以判断出,。此so文件就是签名校验的关键文件,!接着在java层,直接找到加载这个so的代码,直接删除代码
这两行,加载so库的位置,直接删除,编译打包,完美运行
,我也是新手,在学习过程中,写点帖子,主要是自己想增强学习,同时也想给与在这方面的朋友,少走些弯路,
|
免费评分
-
查看全部评分
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|