在调试和分析固件时,我遇到了一堆 cgi 文件,这些文件都符号链接到一个中央 cgi 文件。main 函数所做的第一件事是运行一系列字符串比较来确定应该运行哪个 cgi 文件的函数。
问题是我现在试图将函数映射到它们各自的 cgi 名称,但我对二进制调试相对较新,无法确定如何识别哪些值代表硬编码到内存中的字符串,与输入进行比较。我正在使用 Radare2,下面可以看到代码示例和结构截图。
任何意见,将不胜感激!
0x000099a4 08001be5 ldr r0, [fp - local_8h] ; const char * s1
0x000099a8 b81709e3 movw r1, 0x97b8
0x000099ac 021040e3 movt r1, 2 ; const char * s2
0x000099b0 5affffeb bl sym.imp.strcmp ;[3]; int strcmp(const char *s1, const char *s2)
0x000099b4 0030a0e1 mov r3, r0
0x000099b8 000053e3 cmp r3, 0
0x000099bc 0500001a bne 0x99d8 ;[4]
0x000099c0 10001be5 ldr r0, [fp - local_10h]
0x000099c4 14101be5 ldr r1, [fp - local_14h]
0x000099c8 18201be5 ldr r2, [fp - local_18h]
0x000099cc 1f4e00eb bl sub.setuid_250 ;[5]
0x000099d0 0c000be5 str r0, [fp - local_ch]
