逆向基礎——IDA僞代碼&&ODA快捷鍵&&C查缺補漏

    入坑逆向已經快小半個月了,不得不說入門逆向工程真的難,總結一下小收穫。

一 IDA中的僞代碼

    在解答reversing.kr中的easykengen的逆向時,IDA反彙編中有一段語句如下:

    sprintf(&v13,aS02x,&v13,*(&input + v3++) ^ *(&v6 + i));

    代碼中二個點:

 

    C指針查缺補漏: 

    1.printf細節:

     printf("a=%d",a);其中,a=%d是格式控制,後面的a是輸出列表。%d是格式說明,其中%是引導符,d是格式字符。

    逆向反彙編常用格式字符爲o:無符號八進制u,X/x十六進制,u無符號十進制,d帶符號十進制(正數不輸出符號),s:字符串,c:以字符形式輸出,只輸出一個字符。

    格式控制中格式字符的個數與輸出列表個數相等,且位置一一對應。

    2.指針:

    計算機對所有存儲單元進行統一編號,每個存儲單元都有一個唯一的編號,稱爲該存儲單元的地址編碼。   ,計算機內存地址編碼是線性的

    一個數據佔據的若干存儲單元中的第一個單元地址稱爲該數據的地址。同時程序運行時所佔用的存儲單元是排他性的,一旦被佔用則不潤許在存儲其他內容,程序運行結束釋放空間。

    &是取地址符號,適用於任何類型的變量,返回值是一個地址,常用十六進制數表示。

    *是指針運算符。(int *p = &x;) ==  (int *p; p = &x;),   p是指針變量

    &*p == p(地址)    而*&a == a(任何變量)

    第一個數組元素的地址稱爲首地址,數組名被定義爲&數組名[0]。對於數組a,a+i就是&a[i],所以a[i]可以用*(a+i)表示。

  1. sprintf(*char *str, const char *format,)發送格式化輸出到指針str所指向的字符串。
  2. 僞代碼中的aS02x等價於%s%02x,將長度爲2的十六進制發送到&v13,即將字符的ASCII送入v13,長度不夠用0填充,如果時%2x的話就是長度不夠用空格填充。

二 OD

    

 OD常用快捷鍵:

    F2:設置斷點。(ctrl)F7:單步步入。(ctrl)F8:單步步過。 F4:運行到光標。 F9:運行到斷點。Ctrl+F9:從F7步入的代碼段中返回之前的代碼段。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章