• 安卓逆向从入门到入土之又双叒一道CTF题


    小伙伴发来一道安卓的ctf题目,简单记录一下解题过程,一个apk和安装截图,我就不安装了,使用JEB或者反编译为jar用jd-gui打开都行,定位到MainActivity下:

    关键代码中的关键判断:

    要想验证成功,str.charAt(j) 的值必须等于 paramAnonymousView.charAt(j) ^ i,跟踪str、j、paramAnonymousView和i的值,画个图:

    所以,成功的条件是:用户的输入等于versionName的值的每一位和versionCaode异或的结果。查一下getPackageManager()的getPackageInfo():

     所以,com.example.yaphetshan.tencentgreat和 16384并不是versionName和versionCode的值(可能会造成误区),浏览一下,在BuildConfig中:

    即X<cP[?PHNB<P?aj的每一位和15进行异或运算,简单写个py如下:

    a=0x0f  #15
    b=[0x58,0x3c,0x63,0x50,0x5b,0x3f,0x50,0x48,0x4e,0x42,0x3c,0x50,0x3f,0x61,0x6a] #X<cP[?PHNB<P?aj
    flag=''
    for j in b:
    	flag +=chr(a^j)
    	print(flag)
    

     为啥要一位加一位输出,不知道为啥,感觉看起来好舒服的亚子。。。

     结果为W3l_T0_GAM3_0ne。

  • 相关阅读:
    python03-if
    python03
    基础知识梳理
    开篇话
    托管代码---> CLR --> 自宿主
    反射定义及基础案例
    c# 中委托的发展
    委托代码案例
    委托(实例)
    字节(Byte) 与 位(bit)
  • 原文地址:https://www.cnblogs.com/2rsh0u/p/11719287.html
Copyright © 2020-2023  润新知