花指令
花指令

花指令

花指令是企图隐藏掉不想被逆向工程的代码块(或其它功能)的一种方法,在真实代码中插入一些垃圾代码的同时还保证原有程序的正确执行,而程序无法很好地反编译, 难以理解程序内容,达到混淆视听的效果。
简单的说就是在代码中混入一些垃圾数据阻碍你的静态分析

1.两个跳转一个指向无效数据,一个指向正常数据

c950e27aa40107cd189d32552eeea00a

2.简单的jmp

fcefcc75ead7249a21a73397449f32bf

ida采用的是递归扫描的办法所以能够正常识别

3.jz jnz 互补跳转

IMG_20250210_160817

IMG_20250210_160757

跳转至0x460770,E8为无用数据,nop掉,由于程序进行中本来也会运行到0x460770处,所以jz和jnz也可nop

4.多级跳转

IMG_20250210_162920

编写ida python脚本来解决

5.call&ret构造花指令

1ad9a2cfaba23cc7e9a07cb5b5d7dbea

6.永真条件跳转

通过设置永真或者永假的,导致程序一定会执行,由于ida反汇编会优先反汇编接下去的部分(false分支),也可以调用某些函数会返回确定值,来达到构造永真或永假条件

angr初步学习

符号执行 (Symbolic Execution)是一种程序分析技术。其可以通过分析程序来得到让特定代码区域执行的输入。使用符号执行分析一个程序时,该程序会使用符号值作为输入,而非一般执行程序时使用的具体值。在达到目标代码时,分析器可以得到相应的路径约束,然后通过约束求解器来得到可以触发目标代码的具体值。
————————————————

                        版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/m0_49936845/article/details/120254343

00_angr_find

打开题目附带的py文件

import angr
import sys
def Go():
    path_to_binary = "./00_angr_find" 
    project = angr.Project(path_to_binary, auto_load_libs=False)
    initial_state = project.factory.entry_state()
    simulation = project.factory.simgr(initial_state)

    print_good_address = 0x8048678  
    simulation.explore(find=print_good_address)

    if simulation.found:
        solution_state = simulation.found[0]
        solution = solution_state.posix.dumps(sys.stdin.fileno())
        print("[+] Success! Solution is: {}".format(solution.decode("utf-8")))
    else:
        raise Exception('Could not find the solution')
if __name__ == "__main__":
    Go()

IMG_20250210_175400

输入地址,得出结果

01_angr_aviod

import angr
import sys
def Go():
    path_to_binary = "./01_angr_avoid" 
    project = angr.Project(path_to_binary, auto_load_libs=False)
    initial_state = project.factory.entry_state()
    simulation = project.factory.simgr(initial_state)

    avoid_me_address =   0x080485A8
    maybe_good_address = 0x080485E0

    simulation.explore(find=maybe_good_address, avoid=avoid_me_address)

    if simulation.found:
        solution_state = simulation.found[0]
        solution = solution_state.posix.dumps(sys.stdin.fileno())
        print("[+] Success! Solution is: {}".format(solution.decode("utf-8")))
    else:
        raise Exception('Could not find the solution')
if __name__ == "__main__":
    Go()

IMG_20250210_180625

相关条目

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注