- 博客(191)
- 资源 (1)
- 收藏
- 关注
原创 伪代码中貌似张冠李戴的数组指向
这段代码分析揭示了数组访问的边界计算问题。原始伪代码通过复杂的指针运算访问数组元素,经过计算发现实际访问的是v38和v39数组。
2025-11-10 08:38:40
74
原创 Ada与RTOS
摘要:欧美实时系统中,使用Ada语言开发时,可仅依赖其内置任务机制和运行时系统实现并发调度,无需VxWorks等RTOS。Ada的Ravenscar配置支持裸机环境,适用于航空航天等需高可靠性领域。实际应用取决于系统需求——简单/高可靠系统可纯Ada实现(如欧洲航天局项目),复杂系统则需结合RTOS功能。90年代国内重大项目曾就Ada无RTOS方案与C+VxWorks方案展开讨论,最终选择了后者。
2025-11-10 08:22:06
987
原创 甄别伪代码中的数组下标操作
这段代码展示了指针运算优化的过程。原始代码通过复杂计算访问数组元素:使用4496(即300*15-4)来访问v2数组的第15个元素。分析发现这实际上等价于v2->u96[a2-15]操作,其中u96是一个300字节大小的结构数组(索引0-4),偏移量为4。前面对a2-15的范围检查验证了索引安全性。最终将复杂的memcpy调用简化为直观的数组访问形式,提高了代码可读性且保持了相同功能。
2025-10-31 13:23:06
175
原创 精简伪代码中Ada编译器增生的代码
摘要:本文分析了Ada语言变体记录在逆向工程中的处理方式。通过IDA反编译的伪代码展示了变体记录的实现机制,并提出了用C语言联合类型替代的方案。同时讨论了Ada编译器的范围检查机制及其在反编译中的表现,以及如何优化重复检查代码。文章最后指出,在逆向工程中应着重关注原始代码的设计思想,而非编译器生成的辅助代码。
2025-10-31 10:38:41
364
原创 通过综合分析识别一个全局变量的类型
该代码分析揭示了内存中三个连续变量(page_s_vert_rev_ifr__g_rta_params、dword_2A8E994和byte_2A8E998)实际上构成一个结构体数组。通过重构定义了一个包含uint16_t、uint32_t和uint8_t三个成员的结构体rta_params_t,总大小为12字节。该数组包含2个元素,每个元素都会被初始化为{0,0,3}。后续代码展示了如何访问这个结构体数组中的特定元素成员。这种重构使代码更清晰易读,同时保持了原始的内存布局和功能。
2025-10-22 11:36:30
205
原创 甄别伪代码中被“错用”的数组
该文分析了IDA生成的伪代码中的数组访问越界问题。第一段定义了两个数组v12和Src,第二段代码中for循环对v12[i+23]的赋值实际上会访问到Src数组。通过检查汇编代码发现,IDA将对Src数组的循环操作识别为对v12的操作,因为var_24C对应v12[23]。正确的循环应该是对Src数组从下标4开始的赋值操作。
2025-10-21 13:35:38
385
原创 甄别伪代码中的数组
该文分析了IDA生成的函数伪代码,发现存在数组越界风险。原代码将局部变量存储在v16[302]数组中,但通过表达式*(_DWORD*)&v16[2*a2+272]访问时,当a2≥15会导致访问v16[302]以外的内存。重构后,将变量分为两个数组:var_538[5]和var_318[27],其中var_318专门存储原v17-v28变量,并通过索引安全访问。最终优化了函数调用,使用var_318[a2]替代原先的指针运算,避免了潜在的数组越界问题。
2025-10-19 11:00:30
199
原创 把伪代码函数中的某些变量还原为结构变量的分量
该文章描述了对IDA生成的伪代码进行重构的过程。通过自研工具,将原始变量重新定义为结构体成员,如将var_27改为var_28._1。文章详细说明了结构体mmi_server_types__data_fm_command_t及其子结构的定义,包括107号联合体分量。最终展示了准确的C代码。
2025-09-18 17:33:18
231
原创 在VS2022中使用Copilot修改伪代码的初步体验
摘要:本文记录了在VS2022中使用Copilot处理代码修改请求的过程。第一个请求成功修正了var_98的类型,但在函数声明中添加了不应有的static修饰符。第二个请求涉及识别无效的include语句,Copilot最初正确识别出2个无用头文件,但删除后再次验证时却给出错误结果。
2025-08-24 15:03:59
673
原创 从伪代码到C代码
摘要:作者介绍了使用IDA工具进行逆向工程时面临的挑战,特别是将大量伪代码(158万行)转换为C代码的困难。从2011年起,作者开始开发专用工具来辅助这一过程,包括文件拆分、头文件生成、include语句添加等功能。作者认为这种"工具化"的解决方式源于个人思维习惯,希望不要误导读者。
2025-08-19 13:01:20
939
原创 伪代码函数中的变量名称
本文介绍了IDA生成的伪代码中变量命名规则及其对应关系。变量通常以v加数字命名,部分特殊变量如result、Buf等具有特定含义。注释中显示变量对应的寄存器或栈偏移量,有助于判断结构体布局。作者开发了工具将汇编清单中的变量名(如var_偏移量)替换到伪代码中,简化了结构体逆向分析。通过偏移量可识别相邻变量是否属于同一结构体,最终将基本类型变量替换为结构体类型定义,删除冗余分量变量。该方法有效降低了复杂结构体相关代码的逆向分析难度。
2025-08-19 08:47:16
648
原创 甄别伪代码中的常量
摘要:文章分析了IDA9.0生成的两段伪代码,揭示了逆向工程中常见的数据类型识别问题。第一段代码误将字符串当作数组访问,实际应识别为0xCC2B20处的59个DWORD数组;第二段代码误将整型变量当作数组指针,实际应识别为0xCC2948处的12个WORD数组。通过分析内存地址和汇编指令,文章展示了如何正确识别这些隐藏的数据结构,并给出了修正后的伪代码,为逆向工程中的数据类型识别提供了参考案例。
2025-08-13 11:09:51
818
原创 伪代码中的操作内存函数
本文分析了IDA伪代码中的memcpy和memset操作,指出直接使用固定字节数存在移植问题。作者建议将第三个参数改为sizeof(变量/类型)形式,确保代码适应性。通过两个实例说明:当复制结构体数组时,需正确定义结构体类型并使用sizeof;对于结构体复制,可直接改为赋值语句以提高可读性。
2025-08-13 09:30:33
711
原创 甄别伪代码中的变量
摘要:分析IDA9.0生成的伪代码发现,aFix0Fix1Fix2Fi[50](值为0)和unk_CDF1BF(值为1)构成了结构体数组的下标范围。由于这两个变量在内存中相邻(地址00CDF1BE和00CDF1BF),建议将其定义为unsigned char G_CDF1BE[2]={0,1}。修改后的伪代码通过G_CDF1BE数组清晰地表示了循环的起始和终止条件,解决了原代码中字符串结尾与数组下标混淆的问题,更准确地反映了程序逻辑。
2025-07-31 08:49:27
145
原创 占位符变量savedregs分析实例
摘要:IDA反编译生成的伪代码中的"savedregs"变量通常表示保存的寄存器值,其特殊之处在于它标记了栈帧中寄存器保存的位置。通过计算内存偏移量可确定其对应的真实变量。例如在案例中,通过分析偏移量发现"savedregs"实际上指向一个结构体中的特定字段,最终将伪代码语句转换为更易读的形式。这种方法可有效解决IDA伪代码中"savedregs"变量的解析问题,使其对应到程序实际的变量或数据结构上。
2025-07-31 08:39:32
234
原创 具有out模式参数的Ada函数或过程的逆向分析
本文分析了IDA生成的伪代码与汇编代码的差异,重点讨论了函数返回值处理问题。在伪代码中,函数a424__legs__ci__set_ci只返回eax值,而汇编代码显示它还通过edx返回了第二个值。这导致伪代码中v14变量未被初始化。研究建议修改伪代码以包含edx返回值,并推测原始Ada代码可能使用了out模式参数。这种分析有助于理解编译器如何处理多返回值情况,以及如何正确逆向工程此类函数调用。
2025-07-28 17:35:17
856
原创 IDA对case语句的处理
摘要:本文分析了Ada语言case语句在编译后的实现机制。通过逆向分析发现,IDA生成的伪代码会重新排序case分支,而实际汇编代码通过跳转表(jumptable)实现分支选择,与源代码顺序无关。研究显示,Ada编译器会生成额外的范围检查代码,而IDA会智能地优化掉冗余检查。对比两个示例发现,尽管源代码和伪代码的case顺序不同,但底层实现均采用跳转表机制,因此IDA按数值排序case的做法是可接受的。该研究揭示了编译器对case语句的实现细节与反编译工具的处理策略。
2025-06-23 10:34:46
669
原创 OpenBMC的c++代码中的变量初始化问题(二)
解决在构建openbmc/intel-ipmi-oem的x64可执行模块中遇到的变量初始化问题(二)。
2024-02-24 15:54:53
1351
原创 OpenBMC的c++代码中的变量初始化问题(一)
解决在构建openbmc/intel-ipmi-oem的x64可执行模块中遇到的变量初始化问题(一)。
2024-02-24 15:42:01
754
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅