⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 capimanage.cpp

📁 将exe等可执行文件转化成c程序的反编译程序,先到汇编再到c
💻 CPP
字号:
// Copyright(C) 1999-2005 LiuTaoTao,bookaa@rorsoft.com

//	CApiManage.cpp
#include "stdafx.h"
#include "cisc.h"
#include "cexe2c.h"

CApiManage* g_ApiManage = NULL;

class CApiManage_cpp
{
public:
	CApiManage_cpp();
	~CApiManage_cpp(){}
};

CApiManage_cpp self;

CApiManage_cpp::CApiManage_cpp()
{
	g_ApiManage = new CApiManage;   //new_CApiManage
}
//	--------------------------------------------------


bool CApiManage::new_api(ea_t address,int stacksub)
{
	CApi *p = new CApi;     //new_CApi
	p->address = address;
	p->m_stack_purge = stacksub;
	
	sprintf(p->name,"api_%x",address);
    
	this->apilist->AddHead(p);
	return true;
}
CApi*	CApiManage::get_api(ea_t address)
{
//    DWORD ptr = (DWORD)ea2ptr(address);
	POSITION pos = this->apilist->GetHeadPosition();
	while (pos)
	{
		CApi* p = this->apilist->GetNext(pos);
		if (p->address == address)
		{
			return p;
		}
	}
    assert(0);
	return NULL;
}

void CApiManage::New_ImportAPI(PCSTR pstr, DWORD apiaddr)
{
    //注意这时的apiaddr实际上是个ptr而不是ea_t
    //因为这时ea2ptr函数还不能正常工作
    if (!stricmp(pstr, "RegisterClassExA"))
        log_prtl("New_ImportAPI %s 0x%x", pstr, apiaddr);
    

    CFuncType* pf = Get_FuncDefine_from_name(pstr);
	if (pf == NULL)
		return;
	CApi *p = new CApi;     //new_CApi
	p->address = apiaddr;
    assert(pf);
    p->m_functype = pf;
	p->m_stack_purge = pf->get_stack_purge(); //g_FuncDefineMng.API_stack(pstr);
	
	strcpy(p->name, pstr);
    
	this->apilist->AddHead(p);
}
typedef const BYTE* PCBYTE;
PCSTR check_if_jmp_api(PCBYTE phead)
{
	if (*(WORD *)phead != 0x25ff)
		return NULL;
    phead += 2;

	DWORD d = *(DWORD *)phead;

	CApi* papi = g_ApiManage->get_api((ea_t)d);
	if (papi == NULL)
	{
		alert_prtf("error!!! %x", d);
		return NULL;
	}

	PSTR name = papi->name;
	//alert_prtf("I find jmp api %s",name);
	return name;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -