發表文章

目前顯示的是 2月, 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 Arra...

[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++ Co...

[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 + *pA...

[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    po...

[很雷][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,求教學一下<(_ _)>