sample


//
//            //
// Project Name: Track kid -- OllyDbg's plugin  //
// Version    : 1.20       //
// Author      : prince       //
// Date        : 02-25-2005      //
// E-mail      : cracker_prince@163.com   //
//            //
//

#include <windows.h>
#include <stdio.h>
#include "Plugin.h"


// ===== Globals ======= //
HANDLE   g_hModule;
HWND     g_hMainWnd;
HHOOK    g_hHook;
int      g_nIsTracking = 0;
int   nError;
// ===================== //
BOOL APIENTRY DllMain( HANDLE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
      )
{
 if (DLL_PROCESS_ATTACH == ul_reason_for_call)
 {
  g_hModule = hModule;
 }
    return TRUE;
}

void EndTracking()
{
 UnhookWindowsHookEx(g_hHook);
 g_nIsTracking = 0;
}

extc int _export cdecl ODBG_Plugindata(char shortname[32])
{
    strcpy(shortname, "&T prince's TracKid");
    return PLUGIN_VERSION;
}

extc int ODBG_Plugininit(int ollydbgversion,HWND hw,ulong *features)
{
 g_hMainWnd = hw;
 _Addtolist(0 ,0, "prince's TracKit plugin V1.20 (beta)");
 _Addtolist(0, -1, "Copyright (C) 2004-2005 prince");
 return 0;
}

extc int _export cdecl ODBG_Pluginmenu(int origin, char data[4096], void *item)
{
 if (PM_MAIN == origin)
 {
  strcpy(data, "0 &S Start Tracking, 1 &E End Tracking | 2 &A About Me");

  return 1;
 }
 return 0;
}

void AboutInformation(void)
{
 char chAboutInfo[255];
 sprintf( chAboutInfo
     , "prince's TracKid plugin V1.20 beta/r/n/r/n    Coded by prince/r/n/r/nE-mail: cracker_prince@163.com/r/n/r/n     QQ: 812937/r/n/r/n  Build on 02-25-2005" );
 MessageBox(g_hMainWnd, chAboutInfo, "About prince's TracKid", MB_OK | MB_ICONQUESTION);
}

int Save2Log(char *pchKey, DWORD dwEip)
{
 FILE *pFile;
 char chFileName[128] = {0};
 char *pTmp;
 pTmp = (char *)_Plugingetvalue(VAL_PROCESSNAME);
 memcpy(chFileName, pTmp, 128);
 CreateDirectory(".//TracKid Log", NULL);
 nError = GetLastError();
 char chPath[256] = {0};
 sprintf(chPath, ".//TracKid Log//%s.txt", chFileName);

 pFile = fopen(chPath, "a+");
 nError = GetLastError();
 if (NULL == pFile)
 {
  MessageBox(g_hMainWnd, "Save Log error!", "Sorry", MB_OK);
  return -1;
 }
 else
 {
  char chText[20] = {0};
  sprintf(chText, "%08x -- %s/r/n", dwEip, pchKey);
  fputs(chText, pFile);
  nError = GetLastError();
  if (pchKey[1] == '9')
  {
   fputs("-------------------------/r/n", pFile);
  }
  fclose(pFile);
 }
 return 0;
}

LRESULT CALLBACK GetKeyDown(int nCode, WPARAM wParam, LPARAM lParam)
{
 LRESULT lResult = CallNextHookEx(g_hHook, nCode, wParam, lParam);
 if (HC_ACTION == nCode)
 {
  if (lParam & 0x80000000)
  {
   char chKey[3] = {0};
   if (0x77 == wParam)
   {
    sprintf(chKey, "F8");
   }
   else if (0x76 == wParam)
   {
    sprintf(chKey, "F7");
   }
   else if (0x73 == wParam)
   {
    sprintf(chKey, "F4");
   }
   else if (0x78 == wParam)
   {
    sprintf(chKey, "F9");
   }
   else
   {
    return lResult;
   }

   t_status t_CurStatus;
   t_CurStatus = _Getstatus();
   t_thread *pt_Thread = (t_thread *)malloc(sizeof(t_thread));  // Memroy 01
   if (STAT_STOPPED == t_CurStatus || STAT_RUNNING)
   {
    int nThreadID = _Plugingetvalue(VAL_MAINTHREADID);
    pt_Thread = _Findthread(nThreadID);
   }
   Save2Log(chKey, pt_Thread->reg.ip);

   if (pt_Thread != NULL)           // release Memory 01
   {
    free(pt_Thread);
    pt_Thread = NULL;
   }
  }
 }
 return lResult;
}

void StartTracking(void)
{
 DWORD dwThreadID;
 HINSTANCE hInstance;
 dwThreadID = _Plugingetvalue(VAL_MAINTHREADID);
 hInstance      = (HINSTANCE)_Plugingetvalue(VAL_HINST);
 g_hHook = SetWindowsHookEx(WH_KEYBOARD, (HOOKPROC)GetKeyDown, hInstance, 0);
 nError  = GetLastError();
 g_nIsTracking = 1;
}

extc void _export cdecl ODBG_Pluginaction(int origin, int action, void *item)
{
 if (PM_MAIN == origin)
 {
  switch (action)
  {
  case 0:    // Start Tracking
   {
    if (1 == g_nIsTracking)
    {
     break;
    }
    char chFileName[128] = {0};
    char *pTmp;
    pTmp = (char *)_Plugingetvalue(VAL_PROCESSNAME);
    memcpy(chFileName, pTmp, 128);
    CreateDirectory(".//TracKid Log", NULL);
    nError = GetLastError();
    char chPath[256] = {0};
    sprintf(chPath, ".//TracKid Log//%s.txt", chFileName);
    DeleteFile(chPath);

    StartTracking();
    break;
   }
  case 1:    // End Tracking
   {
    if (1 == g_nIsTracking)
    {
     EndTracking();
    }

    break;
   }
  case 2:    // About Me
   {
    AboutInformation();
    break;
   }
  }
 }
}


extc int _export cdecl ODBG_Pluginclose(void)
{
 if (1 == g_nIsTracking)
 {
  EndTracking();
 }

 return 0;
}

extc void _export cdecl ODBG_Plugindestroy(void)
{
 if (1 == g_nIsTracking)
 {
  EndTracking();
 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值