1. 如果說IDA是倚天劍,LLDB就是屠龍刀.

創(chuàng)新互聯(lián)是一家集網(wǎng)站建設,順平企業(yè)網(wǎng)站建設,順平品牌網(wǎng)站建設,網(wǎng)站定制,順平網(wǎng)站建設報價,網(wǎng)絡營銷,網(wǎng)絡優(yōu)化,順平網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力。可充分滿足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學習、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。
2. LLDB 全名為 Low Level Debugger ,由蘋果出品,內置于Xcode中的動態(tài)調試工具.
3. LLDB是Xcode自帶的調試工具,可以進行Mac應用/iPhone應用調試.
地址: LLDB地址
如果想了解更多關于LLDB內容,可以查看一下LLDB介紹網(wǎng)站.
我們對LLDB命令進行翻譯
Debugger commands:
apropos -- List debugger commands related to a word or subject.
breakpoint -- Commands for operating on breakpoints (see 'help b' for
shorthand.)
bugreport -- Commands for creating domain-specific bug reports.
command -- Commands for managing custom LLDB commands.
disassemble -- Disassemble specified instructions in the current
target. Defaults to the current function for the
current thread and stack frame.
expression -- Evaluate an expression on the current thread. Displays
any returned value with LLDB's default formatting.
frame -- Commands for selecting and examing the current thread's
stack frames.
gdb-remote -- Connect to a process via remote GDB server. If no host
is specifed, localhost is assumed.
gui -- Switch into the curses based GUI mode.
help -- Show a list of all debugger commands, or give details
about a specific command.
kdp-remote -- Connect to a process via remote KDP server. If no UDP
port is specified, port 41139 is assumed.
language -- Commands specific to a source language.
log -- Commands controlling LLDB internal logging.
memory -- Commands for operating on memory in the current target
process.
platform -- Commands to manage and create platforms.
plugin -- Commands for managing LLDB plugins.
process -- Commands for interacting with processes on the current
platform.
quit -- Quit the LLDB debugger.
register -- Commands to access registers for the current thread and
stack frame.
reproducer -- Commands controlling LLDB reproducers.
script -- Invoke the script interpreter with provided code and
display any results. Start the interactive interpreter
if no code is supplied.
settings -- Commands for managing LLDB settings.
source -- Commands for examining source code described by debug
information for the current target process.
statistics -- Print statistics about a debugging session
target -- Commands for operating on debugger targets.
thread -- Commands for operating on one or more threads in the
current process.
type -- Commands for operating on the type system.
version -- Show the LLDB debugger version.
watchpoint -- Commands for operating on watchpoints.
Current command abbreviations (type 'help command alias' for more info):
add-dsym -- Add a debug symbol file to one of the target's current modules
by specifying a path to a debug symbols file, or using the
options to specify a module to download symbols for.
attach -- Attach to process by ID or name.
b -- Set a breakpoint using one of several shorthand formats.
bt -- Show the current thread's call stack. Any numeric argument
displays at most that many frames. The argument 'all' displays
all threads.
c -- Continue execution of all threads in the current process.
call -- Evaluate an expression on the current thread. Displays any
returned value with LLDB's default formatting.
continue -- Continue execution of all threads in the current process.
detach -- Detach from the current target process.
di -- Disassemble specified instructions in the current target.
Defaults to the current function for the current thread and
stack frame.
dis -- Disassemble specified instructions in the current target.
Defaults to the current function for the current thread and
stack frame.
display -- Evaluate an expression at every stop (see 'help target
stop-hook'.)
down -- Select a newer stack frame. Defaults to moving one frame, a
numeric argument can specify an arbitrary number.
env -- Shorthand for viewing and setting environment variables.
exit -- Quit the LLDB debugger.
f -- Select the current stack frame by index from within the current
thread (see 'thread backtrace'.)
file -- Create a target using the argument as the main executable.
finish -- Finish executing the current stack frame and stop after
returning. Defaults to current thread unless specified.
image -- Commands for accessing information for one or more target
modules.
j -- Set the program counter to a new address.
jump -- Set the program counter to a new address.
kill -- Terminate the current target process.
l -- List relevant source code using one of several shorthand formats.
list -- List relevant source code using one of several shorthand formats.
n -- Source level single step, stepping over calls. Defaults to
current thread unless specified.
next -- Source level single step, stepping over calls. Defaults to
current thread unless specified.
nexti -- Instruction level single step, stepping over calls. Defaults to
current thread unless specified.
ni -- Instruction level single step, stepping over calls. Defaults to
current thread unless specified.
p -- Evaluate an expression on the current thread. Displays any
returned value with LLDB's default formatting.
parray -- Evaluate an expression on the current thread. Displays any
returned value with LLDB's default formatting.
po -- Evaluate an expression on the current thread. Displays any
returned value with formatting controlled by the type's author.
poarray -- Evaluate an expression on the current thread. Displays any
returned value with LLDB's default formatting.
print -- Evaluate an expression on the current thread. Displays any
returned value with LLDB's default formatting.
q -- Quit the LLDB debugger.
r -- Launch the executable in the debugger.
rbreak -- Sets a breakpoint or set of breakpoints in the executable.
re -- Commands to access registers for the current thread and stack
frame.
repl -- Evaluate an expression on the current thread. Displays any
returned value with LLDB's default formatting.
run -- Launch the executable in the debugger.
s -- Source level single step, stepping into calls. Defaults to
current thread unless specified.
si -- Instruction level single step, stepping into calls. Defaults to
current thread unless specified.
sif -- Step through the current block, stopping if you step directly
into a function whose name matches the TargetFunctionName.
step -- Source level single step, stepping into calls. Defaults to
current thread unless specified.
stepi -- Instruction level single step, stepping into calls. Defaults to
current thread unless specified.
t -- Change the currently selected thread.
tbreak -- Set a one-shot breakpoint using one of several shorthand formats.
undisplay -- Stop displaying expression at every stop (specified by stop-hook
index.)
up -- Select an older stack frame. Defaults to moving one frame, a
numeric argument can specify an arbitrary number.
v -- Show variables for the current stack frame. Defaults to all
arguments and local variables in scope. Names of argument,
local, file static and file global variables can be specified.
Children of aggregate variables can be specified such as
'var-child.x'. The - and [] operators in 'frame variable' do
not invoke operator overloads if they exist, but directly access
the specified element. If you want to trigger operator
overloads use the expression command to print the variable
instead.
It is worth noting that except for overloaded operators, when
printing local variables 'expr local_var' and 'frame var
local_var' produce the same results. However, 'frame variable'
is more efficient, since it uses debug information and memory
reads directly, rather than parsing and evaluating an
expression, which may even involve JITing and running code in
the target program.
var -- Show variables for the current stack frame. Defaults to all
arguments and local variables in scope. Names of argument,
local, file static and file global variables can be specified.
Children of aggregate variables can be specified such as
'var-child.x'. The - and [] operators in 'frame variable' do
not invoke operator overloads if they exist, but directly access
the specified element. If you want to trigger operator
overloads use the expression command to print the variable
instead.
It is worth noting that except for overloaded operators, when
printing local variables 'expr local_var' and 'frame var
local_var' produce the same results. However, 'frame variable'
is more efficient, since it uses debug information and memory
reads directly, rather than parsing and evaluating an
expression, which may even involve JITing and running code in
the target program.
vo -- Show variables for the current stack frame. Defaults to all
arguments and local variables in scope. Names of argument,
local, file static and file global variables can be specified.
Children of aggregate variables can be specified such as
'var-child.x'. The - and [] operators in 'frame variable' do
not invoke operator overloads if they exist, but directly access
the specified element. If you want to trigger operator
overloads use the expression command to print the variable
instead.
It is worth noting that except for overloaded operators, when
printing local variables 'expr local_var' and 'frame var
local_var' produce the same results. However, 'frame variable'
is more efficient, since it uses debug information and memory
reads directly, rather than parsing and evaluating an
expression, which may even involve JITing and running code in
the target program.
x -- Read from the memory of the current target process.
在Cydia中,搜索并安裝該插件,這個很簡單,就不貼流程了
$cycript -p 可執(zhí)行文件的名字/進程ID
基礎的語法和其他使用,可以查閱 官方文檔
我們除了使用常用的一些命令之外,我們編寫自定義函數(shù)來實現(xiàn)我們的特殊功能,可以提高我們逆向調試的效率
大部分功能我都是從網(wǎng)上copy下來的,只有最后一個是自己動手寫的,嘿嘿
相信大家大部分都能看得懂,這里的語法有點怪怪的,js+oc,我也是模仿著寫的
現(xiàn)在我要找上面這個登錄按鈕是哪一個點擊事件
現(xiàn)在你已經(jīng)知道哪個控制器,哪個函數(shù),想hook不就是分分鐘的事嗎?
非越獄環(huán)境下,同樣也能使用我們的cy文件,由于MonkeyDev內置了Cycript
導入和使用的方式和上面說的方式是一樣的~
iOS逆向 Reveal FLEXLoader 圖層結構
對于iOS逆向,在我們拿到解密后的可執(zhí)行文件后,我們研究的突破口其實就是界面的所在信息,畢竟在沒有任何的針對信息的情況下,去在Hopper中看可執(zhí)行文件的數(shù)據(jù),無異于大海撈針。所以這時候我們需要針對的信息,需要我們hook的控制器或是類名,這樣接下來的研究就會有自己的方向了。
學iOS的童鞋都知道這個神器,不管我們在正向還是逆向開發(fā)中都可以用到這個查看圖層信息的工具,當然在兩種情況的使用的方法是不一樣的,這兒我主要介紹Reveal在逆向開發(fā)中的使用方法。
在用這個工具的時候,其實是踩了很大的坑的。
利用兩種方式的使用Reveal工具,在打開需要逆向的APP后,提示The network connection was lost
至于這兩種方式:
打開Reveal ,Reveal菜單-Help-Show Reveal Library in Finder -iOS Library
方式一:
注意,這個plist文件的格式不能出錯,不然killall SpringBoard命令后出現(xiàn)白蘋果,至于他們的bundleid ,直接到APP的目錄下看info.plist文件即可。
方式二:
推薦方式
/Library/RHRevealLoader,在手機的Library下建立RHRevealLoader文件夾,之后把libReveal.dylib放進這個文件夾下。
在手機中的設置中找到Reveal-Enabled Applications-你需要的app
之后將mac和iOS設備中連接同一個局域網(wǎng)中,打開APP后,在Reveal中查看圖層信息
當然如果你也出現(xiàn)了Reveal中無法顯示問題時:
解決方法:這個是你的libReveal.dylib有問題,這時候你需要換一個
github下的v2.0中的Reveal.dylib地址
這樣將新的libReveal.dylib在手機中替換原來的即可,當然還有一種可能就是連接的局域網(wǎng)網(wǎng)速太差了。
我們期待的結果是:
這個工具是在怎么安裝Reveal都安裝不了的情況下,去了解的一個可以看圖層的工具,這個工具和Reveal不同的是不需要連接Mac電腦,只需要在Cydia中安裝并且在設置中開啟需要的查看的圖層的APP。
可以看到這個工具可以查看APP的文件目錄,整個APP的視圖構架,當前視圖的圖層結構,當然還有很多功能等著你去發(fā)現(xiàn)。
這個是我們的目標視圖的圖層結構。
這樣通過圖層工具我們就比較快的找到我們需要研究的對象了。
一、砸殼工具
dumpdecrypted:
Clutch:
二、界面分析工具
Reveal:
三、監(jiān)控工具
snoop-it:
introspy:
四、靜態(tài)分析工具
IDA:
Hopper:
五、動態(tài)調試工具
lldb:
六、動態(tài)腳本工具
cycript:
frida:
七、抓包工具
BurpSuite:
Charles:
Wireshark:
八、Mac工具
MachOView:
九、導出頭文件工具
class-dump:
十、THEOS越獄開發(fā)工具包
thoes:
十一、文件管理工具
Filza ios設備查看文件系統(tǒng)
iFunBox/iExplorer mac設備查看ios設備的文件系統(tǒng)
十二、debugserver (動態(tài)調試,附加子進程)
十三、常用Tweak.xm預處理指令
十四、符號表恢復工具(restore-symbol)
其他工具:
iOSOpenDev:
insert_dylib:
iTerm:
Alfred:
iTools:
更新:2018-8-16
phantomjs :提供一個瀏覽器環(huán)境的命令行接口,相當于"虛擬瀏覽器"。
PhantomJS官方地址: 。
PhantomJS官方API: 。
PhantomJS官方示例: 。
PhantomJS GitHub: 。
參考文檔:
MonkeyDev :
這里我就直接copy功能點了:
原有iOSOpenDev的升級,非越獄插件開發(fā)集成神器!
frida-ios-dump :一鍵砸殼工具,非常的好用。
Hookzz :通過Hookzz可以快速找到調用的方法,理清程序調用邏輯。
源碼:
文檔:
您可以看一下,這一篇文章 iOS逆向工具之Cydia(iOS)軟件介紹
這一篇 iOS逆向工具之Cydia(iOS)軟件介紹 文章大概就介紹這么多.
上面我知道密碼,還是會輸入錯誤.
正好引入我們的話題 SSH
iOS逆向工具之Cydia(iOS)軟件介紹 這篇文章我只介紹了ssh的使用,本篇介紹一下ssh.
很多朋友會將SSH,OpenSSH,SSL,OpenSSL搞混
1. SSL (Secure Sockets Layer ),網(wǎng)絡通信提供安全及數(shù)據(jù)完整性的一種安全協(xié)議,在傳輸層對網(wǎng)絡連接進行加密.
2. OpenSSL是SSL的開源實現(xiàn),絕大部分HTTPS請求為 HTTP + OpenSSL
3. OpenSSH的加密是通過OpenSSL完成的.
ssh協(xié)議一共2個版本 : SSH-1,SSH-2
現(xiàn)在用的比較多的是SSH-2, 注意 客戶端和服務端版本要保持一致才能通信
如何在客戶端生成一對相關聯(lián)的密鑰(Key Pair):
一個公鑰 (Public Key) , 一個私鑰 (Private Key)
mkdir .ssh
我已經(jīng)創(chuàng)建了,這里報錯:不能創(chuàng)建目錄 .ssh,文件已經(jīng)存在.
輸入命令后,我們就可以免密登錄
注意
如果你輸入命令仍然要輸入密碼可以為authorized_keys文件授權
本篇文章介紹了如何免密遠程登錄手機.
同樣,也介紹了SSL,OpenSSH,SSL,OpenSSL,詳細介紹SSH.
相信你對遠程調試應該是了解了.
終端執(zhí)行這個命令就可以安裝
正向iOS開發(fā)者,Mac上都安裝著Xcode.如果你安裝多個版本Xcode,指定其中一版本的Xcode就行.
終端執(zhí)行命令
越獄iPhone下的簽名工具(更改授權entitlements),可以為theos開發(fā)的程序進程簽名 (支持在OS X和iOS上運行)。
我們可以通過終端命令進行安裝
-ldid 用于簽名
-fakeroot 用于模擬root權限
安裝可能要花費一段時間,耐心等待一下.
注意:
關于ldid簽名知識點補充
這里要提一下加密算法:
1. 對稱加密算法:
RC4,DES,3DES,AES128,AES356等,加解密雙方密鑰相同.
2. 非對稱加密算法:
RSA,Elgamal等,加解密雙方使用密鑰對.
3. 哈希算法:
注意
蘋果簽名:
1. 蘋果簽名 是蘋果官方的私鑰簽名,公鑰驗證
2. 以數(shù)字簽名形式進行簽名
注意
數(shù)字簽名
1. 數(shù)字簽名是非對稱密鑰加密技術與數(shù)字摘要技術的應用.
2. 對指定信息使用哈希算法,得到一個固定長度的信息摘要.
3. 然后再使用 私鑰 對該摘要加密,就得到了數(shù)字簽名.
注意
數(shù)字證書:
1. 數(shù)字證書是一個文件,由蘋果的Apple Worldwide Developer
Relations Certification Authority(WWDR)證書認證中心進行簽名
2. 其主要作用是用來標識身份.
注意
證書文件主要包含兩部分內容: 證書信息 和 證書簽名
1.證書信息
包含用戶的公鑰,用戶個人信息,證書頒發(fā)機構信息,證書有效期等信息
2.證書簽名
WWDR將上述證書本身內容,通過哈希算法得到一個固定長度的信息摘要,然后使用自己的私鑰對該信息摘要加密生成數(shù)字簽名.
3.證書驗證
注意
到這里,ldid介紹完成
dpkg:用于管理deb包.
deb是越獄開發(fā)安裝包的標準格式,dpkg-deb是一個用于操作deb文件的工具,有了這個工具,Theos才能正確地把工程打包成為deb文件.
有的朋友會使用這個命令
報錯 Error: invalid option: --from-bottle
大概意思是:無效的參數(shù),這個有可能和安裝的版本原因.
我多次安裝后,把參數(shù)去掉了
到這里就完成了dpkg的安裝.
我們在終端使用命令
sudo git clone --recursive /opt/theos
我們通過git clone 到/opt/theos目錄下.
克隆需要一部分時間,我們需要耐心等待一會.
我們在終端添加/opt/thoes目錄的所有者
sudo chown -R $(id -u):$(id -g) /opt/theos
source ~/.bash_profile
保存環(huán)境變量并生效
thoes到這里安裝完成.
本篇文章主要介紹了Theos安裝前準備.
我們下篇文章會介紹如何是theos,我們會創(chuàng)建tweak demo為大家介紹.
有問題請留言,持續(xù)關注.
文章題目:ios逆向開發(fā)工具,ios逆向開發(fā)工具有哪些
鏈接分享:http://chinadenli.net/article30/dsgsdso.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站策劃、外貿(mào)建站、面包屑導航、服務器托管、App開發(fā)、定制開發(fā)
聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)