發表文章

目前顯示的是 二月, 2015的文章

[ASM][IDA][C++]爆破也能很優雅!純靜態爆破文件關鍵點+純靜態打Patch(IDA反組譯﹢打Patch)

圖片
在打Patch方面,Windows上分析
一直都有著優異分析能力的Ring3工具有三套 Cheat Engine、OllyICE、IDA
大家比較熟的可能是OllyICE可以直接分析PE Header、分析.text段 然後直接對Patch的資料保存回執行檔文件
或者不少人也知道Cheat Engine有提供一個噁爛等級的Lua腳本 讓你直接用ASM+Lua,不會主流程式語言也能輕鬆製作出補釘工具 有些人乾脆就自己寫一個KeyGen or Patch文件了.
不過今天要介紹的不是這些, 而是大多數人知道IDA可以分析程式靜態邏輯,輕鬆得知內容 而不知道其實IDA也有Patch文件的功能XD (知道的就別看這篇文啦~很雷很雷~~大牛請飄過)
是說本來這篇文想用純英文耍屌寫文章 後來想想...算惹 幹嘛這樣吃力不討好呢(尻杯XD)

初探手工脫UPX殼(IAT修復Dump+ESP定律找OEP),學學如何幫程式脫殼裸奔

圖片
這是個人練習UPX脫殼的筆記文XD
本來就對脫殼技術蠻有興趣der,直到最近才開始練T___T

後繼心得:
自己手脫過一次殼過後才能體會為啥問過某些大佬能不能脫Themida那種殼帶肉的殼
會被以一種“你沒見過世面膩”的眼神翻白眼XDDDDDDDDDD

[OSX] FaceBook會自動被強制登出的元凶

圖片
問題同:發現facebook自動登出的元兇了==

馬的最近臉書在Safari滑一滑就一直被強制登出
後來發現原來是Skype跟臉書如果有做連結的話
Skype會有BUG強制一段時間就幫你登出

解決方法:
到FaceBook的應用程式內把Skype取消連結

[無用][Trick]CheatEngine秒爆軟體收費請求核心檢測點.(以某知名壓縮軟體為例)

圖片
為什麼會有這篇文呢... 純粹因為要去某某學校講場Talk可是怕沒東西Demo撐時間 所以就拿在網路上被拆到爛掉的WinRAR介紹一下惹XD PS:有興趣的人可以用OllyICE手動暴力跟跟看,會發現跟不進去XD ※這篇文一點都不黑、不技術、純學術唷,學術型駭客正夯呢!

[C++]DLL遠程注入(LoadLibraryA)

國中寫的東西現在翻一翻
然後整理一下XD
丟上來Blog當廢文發XD

[VB.NET]DLL跨進程遠程注入(LoadLibraryA)

C++ Source Code在GitHub: https://github.com/aaaddress1/Dll-Injector-In-CB


bool EnablePrivilege() { //提權模組 //這個其實你用不用都沒差(在Win7以上) //不過這個模組如果不用,在XP之下會沒辦法正常寫入記憶體/跨進程存取 HANDLE hToken=NULL; //用OpenProcessToken確認自己的進程等級(非NULL則有權限) if (OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES,&hToken)) return true; LPCTSTR szPrivName = SE_DEBUG_NAME;//調整到DEBUG BOOL fEnable = true; TOKEN_PRIVILEGES tp; tp.PrivilegeCount = 1; LookupPrivilegeValue(NULL,szPrivName,&tp.Privileges[0].Luid); tp.Privileges[0].Attributes = fEnable ? SE_PRIVILEGE_ENABLED:0; AdjustTokenPrivileges(hToken,FALSE,&tp,sizeof(tp),NULL,NULL); return((GetLastError() == ERROR_SUCCESS)); } bool RemoteInject(String DLLPath,DWORD process_id) { EnablePrivilege();//提權 //接著用OpenProcess取得遠端進程控制句柄 void* ProcessHandle = OpenProcess(PROCESS_ALL_ACCESS,false,process_id); if(!ProcessHandle) return false; //接著把String轉Char Array char *lpszDll=Ans…

[VB.NET]DLL跨進程遠程注入(LoadLibraryA)

這份Code在我高二的時候好像就丟在某論壇惹吧
不過既然現在有Blog就一併更新發上來了

[C++]DLL遠程注入(LoadLibraryA)

Source Code在GitHub:
https://github.com/aaaddress1/DLL-Injector-In-VB.NET

核心Code:
Dim DllPath As String = Application.StartupPath + "/MyDll.dll" '先宣告變數來存放你要注入的DLL Dim TargetHandle As IntPtr = Process.GetProcessesByName("ProcessName")(0).Handle '然後透過Process類別去取得Handle '特別注意一下這個Handle取到了就同等於用OpenProcess得到控制句柄了喔 If (TargetHandle.Equals(IntPtr.Zero)) Then MsgBox("對進程 " + ComboBox1.Text + " 進行打開進程行為失敗.") Exit Sub End If '獲取LoadLibraryA的地址(PS:不同進程但同API,地址相同). Dim GetAdrOfLLBA As IntPtr = GetProcAddress(GetModuleHandle("Kernel32"), "LoadLibraryA") If (GetAdrOfLLBA.Equals(IntPtr.Zero)) Then MsgBox("取得LoadLibraryA API函數基址失敗.") Exit Sub End If '將DLL路徑轉為Char()陣列. Dim OperaChar As Byte() = System.Text.Encoding.Default.GetBytes(DllPath) '在目標進程申請一塊空間存放路徑字串. Dim DllMemPathAdr = VirtualAllocEx(TargetHandle, 0&, &…

[OSX][ASM]初探Mac OSX軟件爆破(GDB遠程調試+反匯編+打補丁)

圖片
為什麼會有這篇文產生呢,
純粹因為一直很想摸OSX的App逆向
不過又沒有入門
對岸跟台灣基本上根本沒有文章可以參考...變得入門很難
去找了幾篇國外原文然後花一兩個小時摸摸~這篇算是簡略心得文(?)

是說破完之後發現其實OSX幾乎呈現0保護狀態耶XD
OSX的軟體都還蠻好破解的...
不像MicroSoft被一堆大牛們破解到怕了XD所以Windows超多防護機制
(也很多廠商推出混淆、虛擬機...等手法來反破解這樣)

本身有Windows逆向工程底子的人來摸其實還蠻快就上手惹
會覺得OSX之後會不會像多多鳥一樣很可愛、然後變成下一個Windows的命運XD?
____________我是分割線____________
所以這算是筆記吧(?)
在逆向之前總得有個可憐的孩子被逆向,
不過因為我很菜...不會醜到爆的Obj-C、噁爛的Swift(它真的看起來超像Shift的)
所以我這邊是用C++Builder的跨平台FireMonkey專案開發了一支小App做測試

首先我在VM內寫Code
設計超級他媽簡單...就只有一個按鈕
按鈕內響應的事件:
整個做的事情非常簡單。把a的值設為1,b的值設為2
假設a跟b相等則彈出“Happy”的視窗;若不相等則彈出“Angry"的視窗。
不過因為a跟b本來就永遠都不可能相等所以永遠都只會彈出angryangryangryangryangryangryangryangryangryangryangryangryangryangry

接著用Xcode跟VM的C++Builder遠程連機然後編譯:
長出了一個野生的視窗,上面的按鈕按下去,視窗永遠看起來很生氣的樣子

接著就是調適的部分了
我這邊用的是Hopper Dissasmbler付(ㄆㄛˋ)費(ㄐㄧㄝˇ)版
不要跟我要,網路上找一下就有惹XD
接著載入今天主角...翻了一下它的外導函數很快就可以找到Button_Click的事件惹
(不要問我為啥外導函數這麼醜,去問問CBuilder官方T__T,CBuilder生產出來的東西外導函數都很ㄐㄅ醜)

接著可以看到Button_Click的asm Code怎麼跑的
不過Hopper的反匯編能力還不錯,可以幫你把asm逆推回C++ Code看邏輯怎麼跑
如果你的asm功力頗菜可以參考一下XD
可以從反匯編上看到雖然我們C++…

[C++][PEB][ASM]硬幹取得指定函數的內存地址、透過PEB枚舉獲取指定內存地址之函數名稱

這篇是個人筆記啦XD
基本上就是因為網路上要找到寫這種奇怪的東西,實在找不到
所以就去網路上東抓西抓然後改一改弄出來的東西了

首先是
透過指定模組取得函數名稱的地址(其實就是GetProcAddress API的功能啦)

DWORD GetFuncAddr(HMODULE hModule,char* FuncName) { PIMAGE_DOS_HEADER pDosHeader; PIMAGE_NT_HEADERS pNtHeader; PIMAGE_EXPORT_DIRECTORY pExportDirectory; HMODULE hModuleBase = hModule; pDosHeader = (PIMAGE_DOS_HEADER)hModuleBase; pNtHeader = (PIMAGE_NT_HEADERS)((PBYTE)hModuleBase + pDosHeader->e_lfanew); pExportDirectory = PIMAGE_EXPORT_DIRECTORY(pNtHeader->OptionalHeader.DataDirectory[0].VirtualAddress + (PBYTE)hModuleBase); PDWORD pAddressName = PDWORD((PBYTE)hModuleBase+pExportDirectory->AddressOfNames); //函数名称表指针 PWORD pAddressOfNameOrdinals = (PWORD)((PBYTE)hModuleBase+pExportDirectory->AddressOfNameOrdinals); //函数名称序号表指针 PDWORD pAddresOfFunction = (PDWORD)((PBYTE)hModuleBase+pExportDirectory->AddressOfFunctions); //函数地址表指针 for (int index = 0; index < (pExportDirectory->NumberOfNames); index++) { PCHAR pFunc = (PCHAR)((long)hModuleBase + *pAddressN…

[C++][ASM]免API撈模組基址(asm從PEB硬幹)

這是從對岸忘記從哪裡撈來的...
不過看了一下手法很漂亮就記錄下來惹XD
原理是用asm從PEB去指向模組的List去找這樣
底下稍微改過原本寫法然後補上註解
DWORD GetSelfModule()//等同GetModuleHanle(NULL)
{
DWORD dRetn = 0;
asm
{
   push eax //保護堆疊
   MOV eax,dword ptr fs:[0x30] // pointer to PEB
   MOV eax,dword ptr [eax+0x8] //eax = Current Module Base
   MOV [dRetn],eax
   pop eax //恢復堆疊
}
return dRetn;
} 另個是如果想搜索
DWORD GetKernelModule()//獲取Kernel32 DLL Base
{
DWORD dRetn = 0;
asm
{
   push eax
   mov eax,dword ptr fs:[0x30]   //pointer to PEB
   mov eax,dword ptr [eax+0x0c]   //pointer to loader data
   mov eax,dword ptr [eax+0x1c]   //first entry in initialization order list (ntdll.dll)
   mov eax,dword ptr [eax]    //second entry int initialization order list (kernel32.dll)
   mov eax,dword ptr [eax+0x08]   //base addr of kernel32.dll
   mov [dRetn],eax
   pop eax
}
return dRetn;
} 至於可以用在哪.....
比如說...要做黑黑的事情但是不想被防毒檢測到之類的XD(?)
或者遊戲保護不給搜索(?)不過一般遊戲不會防這個啦

忘了補一個
看雪的某個大大丟的寫法這個也不錯XD
//*參考 看雪 【原创】搜索输出表取得GetProcAddress地址C++版 PIMAGE_DOS_HEADER pDosHeader; PIMAGE_NT_HEADERS pNtH…

[很雷][C++][OllyICE][ASM]摸摸摸、初探Buffer Overflow攻擊

圖片
一直覺得Buffer Overflow的算法很神奇
一定要算到很精確才能讓Shellcode溢位到準確的EIP上做return
不過最近某某大神的這篇緩衝區溢位攻擊:第二章 - 改變程式執行的流程<(_ _)>
看完之後自己的心得吧(?)

不過因為使用上原版的好麻煩...(各種懶惰)
所以改寫了一下

在中間因為x恆等於1所以永遠都會printf出"x is 1"這句話
用跟蹤了一下Dev C++編譯出來的結果
先對strcpy下breakpoint然後跟蹤回去可以看到整支code在哪

接著可以跟蹤一下記憶體
在func函數跑到申請區域變數記憶體完後的stack資料
在func函數跑到尾巴時候的stack資料
可以試著把Dev C內的Code文字改成24個點去占用buffer變數的24個Byte看看
占用後的結果:
會發現還有兩組LONG大小的空間,才會占用到EIP返回點
後來跟了一下22FEC0中記錄的777B8CD5的這個位置,是strcpy的API地址
至於22FEC4的這個就不知道是啥了...看不太懂到底這個位置是?
總之可以得知我們需要占用24個字節+2個LONG的長度+一個LONG(EBP記錄的變數)
最後才能占用到22FECC的EIP返回點

可以發現那個永遠不會被執行到的位置地址為0x0040170C
轉成BYTE Array得寫:0C 17 40 00

所以最後文字的Shellcode可以寫成:
........................xxxxyyyyzzzz\x0C\x17\x40\x00
24個「.」負責占用buffer的內容
四個x負責占用strcpy的地址
四個y負責占用不知道是啥的空間
四個z負責占用占存的EBP值
接著就是補上四個BYTE的返回點
最後把文字換為shellcode,就成功控制了底下的邏輯流程惹

[MASM][無用但又超實用]採集當下指令的地址.(8086)

這鬼東西看起來超沒用,但是它當你要用的時候真的還蠻實用的XD

fldz//想要取得地址的地方
push 00
push 00
push 00
push 00
push 00//以上,保護堆疊
fstenv [esp-0x0C] //這個指令將會修改5個Stack
pop eax//[esp+00] = 下fldz的點的地址
add esp,0x10//共有5個堆疊要推出(但pop eax用掉一個)
主要核心就是fldz做採集地址
然後靠fstenv做寫入堆疊動作 紀錄資料

初探手工爆破逆向Apk(反編+打補釘+回簽)

圖片
為什麼會有這一篇呢?...因為菜逼巴ADR想學學Apk怎麼逆向XD
好歹逆向在Windows上也不算太嫩但感覺技能遲遲無法拿上手機Apk逆向有點雷啊XD


參考文獻:
http://blog.sina.com.cn/s/blog_70677d110100xzht.html
http://blog.csdn.net/lucherr/article/details/39896549

首先
本文主角是這個XD
網路上找來練習逆向的小入門Apk
下載點我點我點我
安裝後,打開程式其實就沒啥功能,就一個控件會負責顯示文字Hello World而已
好惹,那麼來逆逆看它怎麼寫的ψ(`∇´)ψ

[分析][漏洞]破解酷狗音樂IP不在大陸無法聽的限制+解放VIP等級功能(附補釘)

圖片
有人問這個奇怪的問題...XD
然後就去抓了一下酷狗在線音樂這套軟體,然後逆逆看.

首先連去酷狗音樂官網,然後下載這套軟體
接著,安裝完之後就可以看到酷狗軟體介面了
不過很不幸的事情是,會顯示國家不在大陸地區就無法觀看電台、樂庫、MV功能
可以手動用Fiddler抓個包
很快就會發現樂庫、電台、MV這三個功能是用一個IE控件框架+網頁來實現的
所以就有人會想,那是不是跟知名的芊芊靜聽一樣,本機端檢測IP然後做擋掉
很不幸的不是這樣T___T...
可以攔截發送出去的封包會發現,在GET出去之後返回的就是
伺服器直接檢測IP然後return告訴使用者,因為不在大陸地區所以拒絕服務.

所以到這邊可以說的是,
如果想要使用酷狗音樂的功能你就得掛個VPN把IP掛去大陸才能使用了

不過
不過
不過
很重要 說三次
雖然它的服務寫的檢測很穩定,放雲端伺服器比對IP地區然後拒絕服務
但是如果細心的話翻一下返回回來的原始碼
有個很有趣的東西在這裡
如果有登入&帳號等級是vip,那麼就開通vip等級的服務?
我們試試看用台灣IP瀏覽看看VIP等級的頁面試試看
用Chrome瀏覽器+台灣IP直接瀏覽VIP頁面是ok的
那如果我們對酷狗音樂播放器的HTTP請求下Hook直接跳轉到VIP頁面呢?
測試了一下

把酷狗音樂播放器的HTTP GET請求Hook後修改掉連線頁面位置在丟回去讓它繼續run
接著就可以看到酷狗音樂伺服器給了個漂亮的頁面回應
看看酷狗音樂上跑的結果
成功把VIP功能解放出來啦~而且不用登入帳號也不用跳VPN.

最後小記:我本來想把這個需要Hook的點直接打patch上去程式本身,不過這支程式本身我還找不到辦法patch...它的手法很特別的是,

酷狗播放器本身完全不負責連線請求,則是由另個Client端的程式進行連線然後回應給播放器本身.(用IE框架發送)我本來有想直接對Client端的程式打patch...封包撈了一下,UA顯示它的GET請求是.NET發出的,但是用了一系列ildasm,ilspy...工具去分析這支程式都沒辦法打patch... 如果有人研究出怎麼對這支程式打patch,求教學一下<(_ _)>