逆君 发表于 2022-3-31 11:06

Android逆向-算法分析入门题

本帖最后由 逆君 于 2022-3-31 11:13 编辑

运行环境:
WIN10
涉及工具:
MT管理器、NP管理器、JEB【反正能正常反编译转成java代码来看就好】,模拟器【机型:xiaomi9】
教程类型:
算法分析
是否讲解思路和原理:



以下为图文内容:


0x1 前言
看了下攻防区的Android的,是挺少的,然后网上随便搜了点算法逆向的入门题来分析下,不涉及so层,所以难度很低的!


0x2 目的
算法逆向分析,拿到正确的flag


0x3 分析【算法分析】
1.拿到软件后,先打开看下吧,看到就是提示让你输入东西,然后有提示,看是正确还是错误:



2.现在来随便输点字符,看到会提示 “Sorry your flag is wrong” ,假如是老鸟的话,
或者压根不用看这个,直接根据生命周期去找了,这里我就以这个字符去找


3.假如是爆破的话,这种那肯定很简单啦,随便改个判断就能提示正确的了,那就没有意义了,
本次是算法分析,拿到正确的flag,下面用MT打开,搜索上面出现的提示符,看操作:







4.这里不转java也不难看出,输出提示字符前有个判断,判断方法 check 的输出的值,
而这个方法名也是检查的意思,那应该本次的代码分析应该就是在该方法了




5.跳到方法 check 里面看看逻辑,看操作:




6.跳过去后,看着代码貌似有点难度,那不要紧,转成java看就行了,如下:




7.逻辑分析:
          (1)看到先是定义了一个数组s,然后check方法应该是开始校验我们输入的数据,
          (2)chars 就是我们输入的字符了,先是判断我们输入的字符的长度是否不等于数组s的长度 31,说明输入的字符长度为31
               如果输入的字符长度不等于数组s,则直接返回false 【那就会提示“Sorry your flag is wrong”】
          (3)假如长度没问题则往下,定义了一个变量i 默认0,for循环,条件则是判断i是否小于数组的长度,
               并且判断是否小于我们输入的字符长度
          (4)如果上面的循环判断符合条件则执行循环内的判断逻辑——> if this.s != (chars ^ 23) , 正确则false,错误则true
          (5)上面不难看出,最后一步的字符形成【this.s = (chars ^ 23)】就是我们想要的答案,下面直接使用python逆向

8.上面分析得出字符形成的关键在于【this.s = (chars ^ 23)】,
而又因为形成的字符都是ASCII码在0-127的,看下面这图就明白了:


9.根据以上分析,下面可以使用python重新编写逻辑逆向,分析也在图中了,如下:

s = [113, 123, 118, 112, 108, 94, 99, 72, 38, 68, 72, 87, 89, 72, 36, 118, 100, 78, 72, 87, 121, 83, 101, 39, 62, 94,
   62, 38, 107, 115, 106]


flag = ""
v0 = 0
while v0 < 31:
    v1 = 0
    while v1 < 127:
      if (s == (v1 ^ 23)):
            flag += chr(v1)
      v1 += 1
    v0 += 1
print(flag)# flag{It_1S_@N_3asY_@nDr0)I)1|d}





练手包地址:





AhzaU78435 发表于 2022-3-31 11:09

不知道来晚了没有

OkPFH82 发表于 2022-3-31 11:09

不可多得,支持楼主

wtOEh5 发表于 2022-3-31 11:17

感谢楼主

WGIJlqH 发表于 2022-3-31 11:18

谢谢分享

KcthLpNC593 发表于 2022-3-31 11:31

谢谢分享

CAemdn4780 发表于 2022-3-31 12:05

感谢楼主

Rrquk3 发表于 2022-3-31 12:14

来向大佬学习

JbV140 发表于 2022-3-31 12:27

感谢楼主

afxKhM081 发表于 2022-3-31 12:32

谢谢分享
页: [1] 2 3 4 5 6 7 8 9
查看完整版本: Android逆向-算法分析入门题