原创 修改虛函數中部分函數和HOOK虛函數

class CTestVirtual { public:     virtual void FunA()     {         std::cout << "FuncA " << m_iNum << std::endl;     }

原创 解析URL的域名證書

可以通過 openssl 獲取常規的,但是部分網站獲取不正確。 // 請使用 CertFreeCertificateContext 釋放 *p_context void GetCertFromDomain(const wchar_

原创 封裝統一模板調用動態庫(dll)

enum CallLibType {     eStdCall,     eCdecl }; template<typename ResultType, typename ...params> void  CallLibrary(Cal

原创 DLL 內部獲取自身絕對路徑

常見的獲取方法是通過 GetModuleHandle(NULL),獲取當前EXE句柄,然後通過GetModuleFileName獲取EXE路徑。Dll在該路徑下加上 “xxx.dll”,即可。 但是有時候 dll 與 exe 不一

原创 x86 條件轉移指令窺探

條件轉移指令(參考) JA/JNBE 不小於或不等於時轉移. JAE/JNB 大於或等於轉移. JB/JNAE 小於轉移. JBE/JNA 小於或等於轉移. 以上四條,測試無符號整數運算的結果(標誌

原创 Windows 下動態庫的 DllMain 與 c++ 相關坑

首先推薦一系列深度剖析的文章: https://blog.csdn.net/breaksoftware/article/details/8167641 有時候需要在 DllMain 中寫一些代碼,比如下面這樣,其中 TestAtt

原创 解決VC使用unicode字符集時某些ANSI版本函數無法調用的問題

(根據windows 核心編程描述,很多A版本內部其實是調用的W版本,效率上W 更好,更推薦) 查看windows 一個函數的定義如下: WINBASEAPI _NullNull_terminated_ LPCH WINAPI G

原创 創建專有命名空間的內核命名對象

代碼來自 Windows 核心編程。簡單修改測試通過(win10)。可能需要管理員權限。提權代碼這裏沒寫。 本文只是一個簡單示例。 do { wchar_t* _namespace = L"TestNamespace";

原创 利用 openssl 加解密

std::string EncryptByOpenSSL(const std::string& str, const EVP_CIPHER* evp, const unsigned char* key, const unsig

原创 使用 openssl 的 RSA 加解密測試及總結

先看代碼 void MyRSA_Test(RSA *rsa, bool bUsePublicEncrypt, int padding) { unsigned char plain[512] = "Hello world!";

原创 X86 彙編快速入門

基本部分 或: 基本部分 call ret 細節 彙編浮點指令fld、fstp、fadd 寄存器介紹 彙編指令解析 inter 官方手冊

原创 函數調用約定與 call 指令雜談

首先本文關於函數調用約定部分來自轉載和整理,參考文章: C/C++函數調用約定 函數調用約定解析 一:函數調用約定; 函數調用約定是函數調用者和被調用的函數體之間關於參數傳遞、返回值傳遞、堆棧清除、寄存器使用的一種約定; 它是需要

原创 PE文件和COFF文件格式分析——導入表

因爲之前已經介紹了PE基本格式以及導出表相關,因此一些基本的東西就直接省略,用工具直接定位。 PE文件和COFF文件格式分析(1) PE文件和COFF文件格式分析——導出表 本次以 kernel32.dll 爲例,查看其導入表。

原创 PE 文件總體結構概述

前面多篇文章講了PE文件格式,導入導出表的解析。 這裏新開一篇來作爲總結,或者說作爲最開始的概述。 本文以 kernel32.dll 爲例。 使用工具 PEView.exe 查看如下: 可以看到其主要分成幾個部分: 1: Do

原创 PE文件和COFF文件格式分析——導出表

回顧前文 PE文件和COFF文件格式分析(1),並以典型的 msvcp80.dll 來分析。 文件最開始是一個0x40字節的結構。 typedef struct _IMAGE_DOS_HEADER { // DOS .