Android 应用密码检查函数反汇编分析 - sym.Java_com_example_decryptdemo_MainActivity_checkPassword
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}
密码处理逻辑
根据反汇编代码,我们可以推断出密码处理逻辑如下:
- 函数接收三个参数:arg1, arg2, arg3。
- 函数内部调用了一个名为 'fcn.000005e0' 的函数,该函数可能用于对 arg1 进行处理。
- 函数内部调用了另一个名为 'fcn.000005f0' 的函数,该函数可能用于比较处理后的 arg1 和 arg2。
- 如果比较结果为真,则调用名为 'fcn.00000600' 的函数,该函数可能用于对 arg3 进行处理。
- 最后,函数返回处理后的 arg3。
总结
通过分析反汇编代码,我们了解了密码检查函数的执行流程和相关变量,但无法直接确定密码是什么。需要进一步分析函数内部的逻辑,才能确定密码的具体处理方式。
注意事项
- 由于反汇编代码无法直接显示密码内容,因此无法直接确定密码是什么。
- 实际的密码处理逻辑可能比反汇编代码分析的更加复杂,需要结合其他信息进行分析。
- 反汇编代码分析仅供参考,不应作为唯一依据。
请注意: 本文仅供学习交流,不鼓励任何形式的破解或恶意行为。
原文地址: https://www.cveoy.top/t/topic/bFKJ 著作权归作者所有。请勿转载和采集!