IDA分解了以下代码:

seg019:C0292548             loc_C0292548                            ; CODE XREF: sub_C0292414+11Cj
seg019:C0292548 02 00 54 E3                 CMP     R4, #2
seg019:C029254C 0F 00 00 1A                 BNE     loc_C0292590
seg019:C0292550 F0 30 9F E5                 LDR     R3, =0xC0298608
seg019:C0292554 02 2C A0 E3+                MOV     R2, 0x205
seg019:C029255C 00 30 93 E5                 LDR     R3, [R3]
seg019:C0292560 02 00 53 E1                 CMP     R3, R2
seg019:C0292564 04 00 00 1A                 BNE     loc_C029257C
seg019:C0292568 D4 00 9F E5                 LDR     R0, =0xC02860F0
seg019:C029256C 53 FC FF EB                 BL      sub_C02916C0
seg019:C0292570 2B 30 A0 E3                 MOV     R3, #0x2B
seg019:C0292574 7F 20 A0 E3                 MOV     R2, #0x7F
seg019:C0292578 08 00 00 EA                 B       loc_C02925A0


如果我在0xC02860F0上按回车,它将带我到:

seg019:C02860F0 50                          DCB 0x50 ; P
seg019:C02860F1 00                          DCB    0
seg019:C02860F2 6F                          DCB 0x6F ; o
seg019:C02860F3 00                          DCB    0
seg019:C02860F4 77                          DCB 0x77 ; w
seg019:C02860F5 00                          DCB    0
seg019:C02860F6 65                          DCB 0x65 ; e
seg019:C02860F7 00                          DCB    0
seg019:C02860F8 72                          DCB 0x72 ; r
seg019:C02860F9 00                          DCB    0
[...]


这显然是UTF-16小尾数字符串。但是,IDA尚未创建任何适当的交叉引用(字符串上的^ X不会列出任何内容)。我怎样才能做到这一点?当我第一次加载代码时,它似乎已经自动完成了,但是从那时起,我又加载了其他段,而对它们来说却没有做同样的事情。我尝试重新运行自动分析,但没有任何效果。 IDA通常会替我这样做。

有什么想法吗?

评论

您是否曾尝试在段上使用undefinedarea来定义该段?

#1 楼

0xC02860F0处,按Alt + A并选择unicode以将其定义为unicode字符串。完成后,IDA应该识别参考。

评论


我认为他的意思是,他如何利用IDA的自动分析工具在创建初始数据库后加载的代码/数据块中创建字符串和引用,而不是手动进行操作(参见IDA执行分析以针对主要二进制文件自动执行此操作)。

–滚轴
13年6月11日,0:55

#2 楼

按O(或Ctrl + O,取决于细分设置)。

评论


这就是诀窍之一,谢谢!有什么办法可以自动化吗?有很多要修复的参考,我正在尝试进行分析,这取决于了解整个程序在何处使用字符串。创建细分时,我做错什么了吗?

–布伦丹·多兰·加维特(Brendan Dolan-Gavitt)
2013年6月11日13:25

在ARM上,我也曾多次遇到此问题。有点奇怪。 @ BrendanDolan-Gavitt,您是在可疑补偿之上还是之下?您是否尝试过进行重新分析通行证?据我所知,问题是在第一个分析过程中,该值被标记为可疑,而在第二个分析过程中,该值未重新评估该值的可疑性,因此不会更新。

–彼得·安德森(Peter Andersson)
2013年6月13日10:30



@PeterAndersson:限制为0x40011000-0xF1100000,相关地址为0xC02860F0。我已经尝试过重新分析(Options-> Analysis-> Reanalyze程序),但是它似乎在该地址上不起作用(它确实对附近的其他人有用,这甚至很奇怪–我无法分辨出案例之间的区别) 。这些段是Windows CE内核内存的一部分,这些内存已通过idaapi.load_binary_file提取并加载到IDA中。

–布伦丹·多兰·加维特(Brendan Dolan-Gavitt)
2013年6月13日20:48