原标題:IDA7.5 啟動基礎配置
本文為看雪論優秀文章
看雪論壇作者ID:HHHso
前 言
文本以解決IDA7.5的啟動為問題導向。相應IDA7.5版本請購買官方正版或管道測試版。
IDA7.5的安裝路徑不建議有非英文字元;空格一般不影響IDA的運作,但若IDASDK的放置路徑有空格,可能會在開發native插件時帶來額外的配置麻煩,這時一般在編譯配置路裡給帶空格的路徑加上雙引号【“”】可解決。
IDA7.0、IDA7.2、IDA7.5的測試樣例都是64位的,是以python和涉及的第三方都需要是64位的安裝版。
一、官方說明
IDA7.5目錄下README_python3.txt檔案已經說得比較清楚。
目的是讓IDA找到[lib]python.[dll|so|dylib],大意是:
1、IDA7.5預設使用Python3.x,除非下述目錄有use_python2檔案存在,這時使用Python2.7。
* IDA's install path: path/to/ida_install/python/use_python2
* The 'IDAUSR' directory:
+ ~/.idapro/python/use_python2 (on Linux/OSX)
+ %APPDATA%Hex-RaysIDA Propythonuse_python2 (on Windows)
+ [...or any other directory if the environment variable $IDAUSR is set]
2、Python2隻支援一個版本,即2.7版;Python3.x則支援多個x版本,這時候需要運作IDA7.5目錄下官配的idapyswitch.exe進行選擇。
二、啟動配置
如果修改系統全局環境變量,可能會影響其他版本的IDA或影響其他軟體的配置,為了使得各個版本的IDA和其他軟體都相安無事,一直以來都通過批檔案bat簡單配置需要的環境然後間接啟動IDA。
1、IDA7.0 32-bit-addr和Anaconda2的啟動配置7032.bat檔案内容如下:
(1.1)檔案位于IDA7.0目錄下,其快捷方式位置随意,如桌面。
(1.2)因為我給Anaconda2安裝的一些子產品使用了graphviz,是以path多了自己編譯的graphviz路徑。
(1.3)若是其他的python2,把其中的【D:ProgramDataAnaconda2】替換即可。
@ setpath=D:ProgramDatagraphviz_my bin;%path%
@ setpath=D:ProgramDataAnaconda2;D:ProgramDataAnaconda2s;D:ProgramDataAnaconda2Librarybin;D:ProgramDataAnaconda2Lib;D:ProgramDataAnaconda2DLLs;D:Program FilesIDA 7.0python;%path%
@ setPYTHONPATH=D:ProgramDataAnaconda2Lib;D:ProgramDataAnaconda2DLLs;D:ProgramDataAnaconda2Liblib-tk;
@ startida.exe
2、IDA7.0 64-bit-addr和Anaconda2的啟動配置7064.bat檔案内容如下,同理,隻是把ida.exe改為ida64.exe。
@ setpath=D:ProgramDatagraphviz_my bin;%path%
@ setpath=D:ProgramDataAnaconda2;D:ProgramDataAnaconda2s;D:ProgramDataAnaconda2Librarybin;D:ProgramDataAnaconda2Lib;D:ProgramDataAnaconda2DLLs;D:Program FilesIDA 7.0python;%path%
@ setPYTHONPATH=D:ProgramDataAnaconda2Lib;D:ProgramDataAnaconda2DLLs;D:ProgramDataAnaconda2Liblib-tk;
@ startida64.exe
IDA7.2的啟動配置與IDA7.0的啟動配置基本相同,python相關的路徑設定不變。
【D:Program FilesIDA 7.0python】改為【D:Program FilesIDA 7.2python】
3、IDA7.2 32-bit-addr和Anaconda2的啟動配置7232.bat檔案内容如下:
(1.1)檔案位于IDA7.2目錄下,其快捷方式位置随意,如桌面。
(1.2)因為我給Anaconda2安裝的一些子產品使用了graphviz,是以path多了自己編譯的graphviz路徑。
(1.3)若是其他的python2,把其中的【D:ProgramDataAnaconda2】替換即可。
@ setpath=D:ProgramDatagraphviz_my bin;%path%
@ setpath=D:ProgramDataAnaconda2;D:ProgramDataAnaconda2s;D:ProgramDataAnaconda2Librarybin;D:ProgramDataAnaconda2Lib;D:ProgramDataAnaconda2DLLs;D:Program FilesIDA 7.2python;%path%
@ setPYTHONPATH=D:ProgramDataAnaconda2Lib;D:ProgramDataAnaconda2DLLs;D:ProgramDataAnaconda2Liblib-tk;
@ startida.exe
4、IDA7.2 64-bit-addr和Anaconda2的啟動配置7264.bat檔案内容如下,同理,隻是把ida.exe改為ida64.exe。
@ setpath=D:ProgramDatagraphviz_my bin;%path%
@ setpath=D:ProgramDataAnaconda2;D:ProgramDataAnaconda2s;D:ProgramDataAnaconda2Librarybin;D:ProgramDataAnaconda2Lib;D:ProgramDataAnaconda2DLLs;D:Program FilesIDA 7.2python;%path%
@ setPYTHONPATH=D:ProgramDataAnaconda2Lib;D:ProgramDataAnaconda2DLLs;D:ProgramDataAnaconda2Liblib-tk;
@ startida64.exe
對于python2,IDA7.5的啟動配置與IDA7.0的啟動配置基本相同,python相關的路徑設定不變。
A、【 D:Program FilesIDA 7.0python】改為【D:Program FilesIDA 7.5python2】,注意後面的子目錄“2”。
B、我們增加了use_python2檔案生成指令 【echo . > "D:Program FilesIDA 7.5pythonuse_python2"】。
user_python2檔案可以生成在上面【一】官方說明提到的任意一個路徑,這裡放在IDA7.5目錄下的python目錄中。
請根據IDA7.5的目錄按實際情況修改生成指令。
5、IDA7.5 32-bit-addr和Anaconda2的啟動配置7532_27.bat檔案内容如下:
(1.1)檔案位于IDA7.5目錄下,其快捷方式位置随意,如桌面。
(1.2)因為我給Anaconda2安裝的一些子產品使用了graphviz,是以path多了自己編譯的graphviz路徑。
(1.3)若是其他的python2,把其中的【D:ProgramDataAnaconda2】替換即可。
@ setpath=D:ProgramDatagraphviz_mybin;% path%
@ setpath=D:ProgramDataAnaconda2; D: ProgramDataAnaconda2s; D: ProgramDataAnaconda2Librarybin; D: ProgramDataAnaconda2Lib; D: ProgramDataAnaconda2DLLs; D: ProgramFilesIDA7 .5python2;% path%
@ setPYTHONPATH=D:ProgramDataAnaconda2Lib; D: ProgramDataAnaconda2DLLs; D: ProgramDataAnaconda2Liblib-tk;
@ echo. > "D:Program FilesIDA 7.5pythonuse_python2"
@start ida.exe
6、IDA7.5 64-bit-addr和Anaconda2的啟動配置7564_27.bat檔案内容如下,同理,隻是把ida.exe改為ida64.exe。
@ setpath=D:ProgramDatagraphviz_mybin;% path%
@ setpath=D:ProgramDataAnaconda2; D: ProgramDataAnaconda2s; D: ProgramDataAnaconda2Librarybin; D: ProgramDataAnaconda2Lib; D: ProgramDataAnaconda2DLLs; D: ProgramFilesIDA7 .5python2;% path%
@ setPYTHONPATH=D:ProgramDataAnaconda2Lib; D: ProgramDataAnaconda2DLLs; D: ProgramDataAnaconda2Liblib-tk;
@ echo. > "D:Program FilesIDA 7.5pythonuse_python2"
@start ida64.exe
對于python3,IDA7.5的啟動配置與IDA7.0的啟動配置基本相同,python相關的路徑設定根據實際安裝路徑配置。
A、 【D:Program FilesIDA 7.0python】改為【D:Program FilesIDA 7.5python3】,注意後面的子目錄“3”。
B、我們增加了use_python2檔案删除指令 【@del "D:Program FilesIDA 7.5pythonuse_python2"】。
請根據IDA7.5的目錄按實際情況修改删除指令。
C、由于是python3,這裡需要多一步前面【一】官方說明的使用官方自帶的idapyswitch.exe選擇系統裡已經存在的心中囑意的python3.x版本。
例如下述cmd中在IDA7.5目錄下運作idapyswitch.exe,列出了系統有的幾個版本,有py39,py38,微軟IDE某年月裝的py36等,這裡選擇1。
其實際是patch了【D:Program FilesIDA 7.5python3PyQt5sip.pyd】來選中我們囑意的版本。
python3配置必執行配置指令,除非版本與官方sip.pyd選中的版本相同,目測官方選的是py38。
(base) D:Program FilesIDA 7.5>idapyswitch.exe
Checking installs from "Python Software Foundation"
Checking "Python 3.6 (64-bit)"( 3.6)
Found: "C:Program Files (x86)Microsoft Visual StudioSharedPython36_64"(version: 3.6. 6( '3.6.6150.1013'))
Checking installs from "Continuum Analytics, Inc."
Checking "Anaconda 5.2.0"( 3.6)
Found: "D:ProgramDataAnaconda3"(version: 3.6. 5( '3.6.5150.1013'))
Checking "Anaconda 2020.07"( 3.8)
Found: "C:py38_x86_64anaconda3"(version: 3.8. 3( '3.8.3150.1013'))
Checking installs from "Python Software Foundation"
Checking "Python 3.6 (64-bit)"( 3.6)
Found: "D:ProgramDataPython36_amd64"(version: 3.6. 7( '3.6.7150.1013'))
Checking "Python 3.9 (64-bit)"( 3.9)
Found: "C:Python39-64"(version: 3.9. 0( '3.9.101.1013'))
The following Python installations were found:
#0: 3.9.0 ('3.9.101.1013') (C:Python39-64python3.dll)
#1: 3.8.3 ('3.8.3150.1013') (C:py38_x86_64anaconda3python3.dll)
#2: 3.6.7 ('3.6.7150.1013') (D:ProgramDataPython36_amd64python3.dll)
#3: 3.6.6 ('3.6.6150.1013') (C:Program Files (x86)Microsoft Visual StudioSharedPython36_64python3.dll)
#4: 3.6.5 ('3.6.5150.1013') (D:ProgramDataAnaconda3python3.dll)
Please pick a number between 0and 4(default: 0)
1
Applying version 3.8. 3( '3.8.3150.1013')
然後還是正常配置我們的啟動配置。
7、IDA7.5 32-bit-addr和Anaconda3的啟動配置7532_38.bat檔案内容如下:
(1.1)檔案位于IDA7.5目錄下,其快捷方式位置随意,如桌面。
(1.2)因為我給Anaconda2安裝的一些子產品使用了graphviz,是以path多了自己編譯的graphviz路徑。
(1.3)若是其他的python2,把其中的 【C:py38_x86_64anaconda3】替換即可。
@ del"D:Program FilesIDA 7.5pythonuse_python2"
@set path=C:py38_x86_64anaconda3; C: py38_x86_64anaconda3s; C: py38_x86_64anaconda3Librarybin; C: py38_x86_64anaconda3Lib; C: py38_x86_64anaconda3DLLs; D: ProgramFilesIDA7 .5python3;% path%
@ setPYTHONPATH=C:py38_x86_64anaconda3Lib; C: py38_x86_64anaconda3DLLs; C: py38_x86_64anaconda3Liblib-tk;
@ startida.exe
8、IDA7.5 64-bit-addr和Anaconda3的啟動配置7564_38.bat檔案内容如下,同理,隻是把ida.exe改為ida64.exe。
@ del"D:Program FilesIDA 7.5pythonuse_python2"
@set path=C:py38_x86_64anaconda3; C: py38_x86_64anaconda3s; C: py38_x86_64anaconda3Librarybin; C: py38_x86_64anaconda3Lib; C: py38_x86_64anaconda3DLLs; D: ProgramFilesIDA7 .5python3;% path%
@ setPYTHONPATH=C:py38_x86_64anaconda3Lib; C: py38_x86_64anaconda3DLLs; C: py38_x86_64anaconda3Liblib-tk;
@ startida64.exe
最後,如果IDA7.0、IDA7.2、IDA7.5都齊全,大概桌面有這八個輕按兩下啟動檔案的快捷方式:
三、第三方子產品的配置
一般unicorn、capstone、keystone等都是屬于python的配置,與IDA無關。
qiling架構如果不使用IDA相關的操作,也與IDA無關,可以根據python3獨立安裝配置。
1.ipyida
官方安裝說明也簡單,一鍵安裝,就是在啟動IDA7.5後,在IDAPython裡執行一鍵安裝指令:
python2
import urllib.request; exec(urllib.request.urlopen( 'https://github.com/eset/ipyida/raw/stable/install_from_ida.py'). read)
python3
import urllib.request; exec(urllib.request.urlopen( 'https://github.com/eset/ipyida/raw/stable/install_from_ida.py'). read)
一鍵指令的核心操作實際就是【pip install ipyida】和【複制 ipyida_plugin_stub.py檔案到IDA7.5的plugins目錄中,其在plugins目錄中重命名為ipyida.py】。
windows的安裝可能會遇到的一些問題,沒有遇到,則忽略。
NotImplementedError(這應該屬于jupyter的bug)。
File "C:py38_x86_64anaconda3Libasyncioevents.py", line 501, inadd_reader
raiseNotImplementedError
NotImplementedError
或
app.shell.set_completer_frame
AttributeError: 'NoneType'object has no attribute 'set_completer_frame'
解決辦法:
在tornadoplatformasyncio.py檔案中,在 importasyncio之後添加下述修複代碼,如(C:py38_x86_64anaconda3Libsite-packagestornadoplatformasyncio.py)
importsys
ifsys.platform == 'win32':
asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy)
如何定位asyncio位置?
簡單運作python,然後即可查閱
importasyncio
print(asyncio.__file__)
【 IDA 7.5/plugins/ipyida_plugin_stub.py】或【IDA 7.5/plugins/ipyida.py】加載失敗問題:encoding declaration in Unicode string,如:
一般是使用IDA7.5的python2時觸發此問題,python2和python3時獨立通過pip install ipyida的,但需要共享pluginsipyida.py。
D:Program FilesIDA 7.5pluginsipyida_plugin_stub.py: encoding declaration in Unicode string (D:/Program Files/IDA 7.5/plugins/ipyida_plugin_stub.py, line 0)
Traceback (most recent calllast):
File"D:Program FilesIDA 7.5python2ida_idaapi.py", line 643, inIDAPython_Exec
code = compile(raw.decode( encoding), , 'exec')
File"D:/Program Files/IDA 7.5/plugins/ipyida_plugin_stub.py", line 0
SyntaxError: encodingdeclaration inUnicodestring
要實作python2和python3共享pluginsipyida.py,則對pluginsipyida.py删除首行的encoding聲明,并去掉Author作者的特殊字元即可。
通過 pip安裝的 ipyida,可通過
importipyida
print( ipyida.__file__)
查詢對應 python安裝的 ipyida目錄下的 ipyida_plugin_stub.py,複制一份到 pluginsipyida.py即可,然後做下圖修改
ipyida的from PyQt5 import QtCore, QtSvg, QtWidgets, QtGui, QtPrintSupport問題,此問題一般是早期版本的python2觸發。
因為ipyida比較新,要求qtconsole>=4.6,而最新的5.0又對python2不友好(沒有提供相應版本)是以高不成,低不就的錯誤。
一般通過pip uninstall qtconsole,重新裝各python2友好的最高版,官方最後支援python2的是4.7.7。
通過curl或直接下載下傳qtconsole -4.7.7-py2.py3-none- any.whl
curl https: //files.pythonhosted.org/packages/c1/35/0479d9707e3c459901a64dd49843b2f06a65a647dc2bcee7b8bfe3560da1/qtconsole-4.7.7-py2.py3-none-any.whl -oqtconsole-4.7.7-py2.py3-none-any.whl
然後安裝
pip install qtconsole -4.7.7-py2.py3-none- any.whl
最後測試
fromPyQt5 importQtCore, QtSvg, QtWidgets, QtGui, QtPrintSupport
題外,一般不要嘗試将ipyida裝到7.0或7.2版本,本身ipyida是針對7.4以上的,7.4以下可考慮ida_ipython。
2. sark
python3 安裝:
gitclone https://github.com/tmr232/Sark.git
cdSark
pythonsetup.py install
sark最新支援IDA7.4以上,但不要嘗試在IDA7.5的python2中使用sark,api不相容。
一般python2使用sark,就在IDA7.4以下版本的IDA,而python3使用sark,就在IDA7.4以上。
最後,IDA7.5的python2的配置雖然有提供參考,應該作為備用緩解使用。
建議在IDA7.4以上版本積極擁抱python3,而在IDA7.4以下版本懷舊python2。
看雪ID:HHHso傳回搜狐,檢視更多
責任編輯: