Android 应用密码检查函数反汇编分析 - sym.Java_com_example_decryptdemo_MainActivity_checkPassword

本文分析了 Android 应用中密码检查函数 'sym.Java_com_example_decryptdemo_MainActivity_checkPassword' 的反汇编代码,展示了函数的执行流程和相关变量,并解释了密码的处理逻辑。

反汇编代码分析

[0x00000468]> pdf @sym.Java_com_example_decryptdemo_MainActivity_checkPassword
┌ 102: sym.Java_com_example_decryptdemo_MainActivity_checkPassword (int16_t arg1, int16_t arg2, int16_t arg3);                                                                              │           ; arg int16_t arg1 @ r0
│           ; arg int16_t arg2 @ r1
│           ; arg int16_t arg3 @ r2
│           ; var int16_t var_0h @ sp+0x0                                                     │           ; var int8_t var_19h @ sp+0x7
│           ; var int16_t var_8h @ sp+0x8
│           ; var int16_t var_ch @ sp+0xc
│           ; var int16_t var_10h @ sp+0x10
│           ; var int16_t var_14h @ sp+0x14
│           ; var int16_t var_18h @ sp+0x18
│           ; var int16_t var_1ch @ sp+0x1c
│           ; var int16_t var_0h_2 @ sp+0x20
│           0x00000510      80b5           push {r7, lr}                                      │           0x00000512      6f46           mov r7, sp
│           0x00000514      88b0           sub sp, 0x20
│           0x00000516      0790           str r0, [var_1ch]           ; arg1
│           0x00000518      0691           str r1, [var_18h]           ; arg2                 │           0x0000051a      0592           str r2, [var_14h]           ; arg3
│           0x0000051c      0798           ldr r0, [var_1ch]
│           0x0000051e      0168           ldr r1, [r0]
│           0x00000520      d1f8a432       ldr.w r3, [r1, 0x2a4]
│           0x00000524      0599           ldr r1, [var_14h]
│           0x00000526      0022           movs r2, 0
│           0x00000528      0092           str r2, [sp]
│           0x0000052a      9847           blx r3
│           0x0000052c      0490           str r0, [var_10h]                                  │           0x0000052e      1248           ldr r0, [0x00000578]        ; [0x578:4]=0xffffff2c
│           0x00000530      7844           add r0, pc                  ; 0x460 ; '709<0#0'
│           0x00000532      0390           str r0, [var_ch]
│           0x00000534      0398           ldr r0, [var_ch]                                   │           0x00000536      5521           movs r1, 0x55               ; 'U'
│           0x00000538      00f052e8       blx fcn.000005e0
│           ; CODE XREF from fcn.00000580 @ 0x590(x)
│           0x0000053c      0146           mov r1, r0
│           ; CODE XREF from fcn.00000580 @ 0x592(x)
│           0x0000053e      0098           ldr r0, [sp]
│           0x00000540      0291           str r1, [var_8h]
│           0x00000542      07f8190c       strb r0, [var_19h]
│           0x00000546      0498           ldr r0, [var_10h]
│           0x00000548      0299           ldr r1, [var_8h]
│           0x0000054a      00f052e8       blx fcn.000005f0
│       ┌─< 0x0000054e      20b9           cbnz r0, 0x55a
│      ┌──< 0x00000550      ffe7           b 0x552
│      ││   ; CODE XREF from sym.Java_com_example_decryptdemo_MainActivity_checkPassword @ 0x550(x)
│      └──> 0x00000552      0120           movs r0, 1
│       │   0x00000554      07f8190c       strb r0, [var_19h]
│      ┌──< 0x00000558      ffe7           b 0x55a
│      ││   ; CODE XREFS from sym.Java_com_example_decryptdemo_MainActivity_checkPassword @ 0x54e(x), 0x558(x)
│      └└─> 0x0000055a      0298           ldr r0, [var_8h]
│           0x0000055c      00f050e8       blx fcn.00000600
│           0x00000560      0798           ldr r0, [var_1ch]
│           0x00000562      0168           ldr r1, [r0]
│           0x00000564      d1f8a832       ldr.w r3, [r1, 0x2a8]
│           0x00000568      0599           ldr r1, [var_14h]
│           0x0000056a      049a           ldr r2, [var_10h]
│           0x0000056c      9847           blx r3
│           0x0000056e      17f8190c       ldrb r0, [var_19h]
│           0x00000572      08b0           add sp, 0x20
└           0x00000574      80bd           pop {r7, pc}

密码处理逻辑

根据反汇编代码,我们可以推断出密码处理逻辑如下:

  1. 函数接收三个参数:arg1, arg2, arg3。
  2. 函数内部调用了一个名为 'fcn.000005e0' 的函数,该函数可能用于对 arg1 进行处理。
  3. 函数内部调用了另一个名为 'fcn.000005f0' 的函数,该函数可能用于比较处理后的 arg1 和 arg2。
  4. 如果比较结果为真,则调用名为 'fcn.00000600' 的函数,该函数可能用于对 arg3 进行处理。
  5. 最后,函数返回处理后的 arg3。

总结

通过分析反汇编代码,我们了解了密码检查函数的执行流程和相关变量,但无法直接确定密码是什么。需要进一步分析函数内部的逻辑,才能确定密码的具体处理方式。

注意事项

  • 由于反汇编代码无法直接显示密码内容,因此无法直接确定密码是什么。
  • 实际的密码处理逻辑可能比反汇编代码分析的更加复杂,需要结合其他信息进行分析。
  • 反汇编代码分析仅供参考,不应作为唯一依据。

请注意: 本文仅供学习交流,不鼓励任何形式的破解或恶意行为。

Android 应用密码检查函数反汇编分析 - sym.Java_com_example_decryptdemo_MainActivity_checkPassword

原文地址: https://www.cveoy.top/t/topic/bFKJ 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录