一次工作中APP漏洞挖掘案例-逆向smail分析案例

一次工作中APP漏洞挖掘案例-逆向smail分析案例



APP逆向分析登录绕过案例

首先是下载APP程序

发现APP程序可以被反编译


捕获.PNG




程序并未保护,可被反编译,导致可以自动签名生成新的APK

简单做一下APP逆向分析



图片1.png


搜索\u767b\u5f55\u5931\u8d25

    invoke-virtual {p1, p2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z

发现这里做了一个调用P1,P2,分别比较Z


 const-string p2, "\u767b\u5f55\u6210\u529f"

这里开始登录成功

 

   if-eqz p1, :cond_3

 

    goto :goto_0

 

如果p1相等,那么就跳转到cond_3,接着一个无条件跳转

如果 不相等,否则,执行到

const-string p2, "\u767b\u5f55\u5931\u8d25"

 

那么要逆向的话,直接执行反方向就可以了

直接if-eqz p1换成  if-nez-p1, :cond_3

无论怎么执行,都是登录成功,达到逆向的目的



图片2.png




APP逆向分析去掉APP更新案例


下载APP,

发现程序并未保护,导致信息泄露漏洞


捕获34.PNG



简单逆向分析一下

比如


图片3.png


不让APP程序更新

实际控制的是common_google_play_services_update_button

跟进一下


捕获42.PNG



找到三处关键的smail代码段

 

.field public static final common_google_play_services_update_button:I = 0x7f0f0036

 

可以不用管

 

直接跟进

 

sget p1, Lcom/google/android/gms/base/R$string;->common_google_play_services_update_button:I



图片4.png



可以看到,这里就是控制升级的地方了

这里关键控制的是I

有一个调用

sget p1, Lcom/google/android/gms/base/R$string;->common_google_play_services_update_button:I

这个地方,也就是程序会执行更新执行的命令


图片5.png



往上走,都是调用了I

我们查看一下I的方法引用


图片6.png



通过查看方法引用可以发现,这里有一个

common_signin_button_text_long:I

实际也就是触发用户的点击确认更新!


也就是说,默认点击确认更新,既会自动更新APP程序

那么我们想不让他点击确定,就不让他执行方法就可以了

具体做法是

直接把

invoke-virtual {p0, p1}, Landroid/content/res/Resources;->getString(I)Ljava/lang/String;

引用的方法,注释掉!


图片7.png


这样做的目的,就是不让程序执行自动更新,达到逆向的目的,就写到这里...