日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

(逆向)angr 执行二进制函数

發布時間:2025/3/15 编程问答 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 (逆向)angr 执行二进制函数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

關于angr:

github 搜索angr



首先編譯源碼:

#include<stdio.h>
unsigned int ORHash(char *str , int len){
? ? ?int i = 0 ;
? ? ?unsigned int hash = 1315423911;
? ? ?for (i =0;i<len;++i ,str++){
? ? ? ? hash ^= (hash<<5 + (*str) + hash>>1 ) ;
? ? ?}
? ? ?return hash;


}
unsigned int TestFunc(char *s){
? ? ? ?int hash = 0 ;
? ? ? ?while (*s){
? ? ? ? ?hash += (*s);
? ? ? ? ?s++;
? ? ? ?}
? ? ? ?return hash;


}
int main(){


? ? unsigned int tmp = 0;
? ? tmp = 1315423911 ^328855977 + 3438859488 + ('y') ^((1315423911 ^ 328855977 + 3438859488 + ('y')) >> 2) +((1315423911 ^ 328855977 + 3438859488 + ('y')) << 5) +('y');
? ? printf("%u\n",tmp);
? ? printf("%u\n",'y');
? ? printf("test = %d\n",TestFunc("aass"));
? ? printf("orhash = %u\n" , ORHash("ysg" ,3));
}


得到可執行文件 test

用ida 得到函數ORHash的入口地址 0x40052D


下面使用angr 加載可執行文件test ,運行ORHash函數得到結果


import angrb = angr.Project('test',load_options={'auto_load_libs':False})cfg = b.analyses.CFGAccurate(keep_state = True) addr = 0x40052D # print cfg.graph # print len(cfg.graph.nodes()),len(cfg.graph.edges()) # # entry_node = cfg.get_any_node(addr) # # print 'contexts :' ,len(cfg.get_all_nodes(addr)) # # print entry_node.predecessors # print entry_node.successors# print [jumpkind + ' to ' +hex(node.addr) for node , jumpkind in cfg.get_successors_and_jumpkind(entry_node)]entry_func = cfg.kb.functions[addr] # print entry_func.block_addrs # func_graph = entry_func.transition_graph # print func_graph # print entry_func.returning function = entry_func.callable # p = [] out = function("qwe",3) print out print out.args[0]
得到結果 947199883?

和原可執行文件輸出一致

總結

以上是生活随笔為你收集整理的(逆向)angr 执行二进制函数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。