最近写了个查杀木马的小程序,想给他做个漂亮的皮肤。就用了skin++。选择了一个和鸽子一样的皮肤。做好皮肤后,发现程序多了一个skin++的dll文件--SkinPPWTL.dll。以后用的时候不可能老是带个dll文件。于是我想采用静态链接。设置vc的工程,改成use mfc with a static library.结果发现生成的程序还是离不开那个dll文件。
于是我想起以前有高手说过的方法。用getprocaddress。我需要的函数是
SKINPPWTL_API BOOL skinppLoadSkinFromRes(HINSTANCE hInstance,LPCTSTR szResourceName, LPCTSTR szResourceType,TCHAR* szSkinFileName);
我导出了那个dll文件的函数。
Export, SkinPPWTL.dll
Ordinal Address Name
00000005 100075D7 ??0CSkinIniFile@@QAE@ABV0@@Z
00000006 10007945 ??0CSkinIniFile@@QAE@VCString@WTL@@@Z
00000007 1000772A ??0CSkinIniFile@@QAE@XZ
00000008 100079C6 ??1CSkinIniFile@@UAE@XZ
00000009 1000767E ??4CSkinIniFile@@QAEAAV0@ABV0@@Z
0000000F 10059934 ??_7CSkinIniFile@@6B@
00000010 10008776 ?DeleteKey@CSkinIniFile@@QAE_NABVCString@WTL@@@Z
00000011 10008723 ?DeleteValue@CSkinIniFile@@QAE_NABVCString@WTL@@0@Z
00000014 100087AB ?FindKey@CSkinIniFile@@QAEHABVCString@WTL@@@Z
00000016 100087E7 ?FindValue@CSkinIniFile@@QAEHHABVCString@WTL@@@Z
00000017 10008109 ?GetNumKeys@CSkinIniFile@@QAEHXZ
00000019 1000810D ?GetNumValues@CSkinIniFile@@QAEHVCString@WTL@@@Z
0000001A 100081FB ?GetValue@CSkinIniFile@@QAE?AVCString@WTL@@ABV23@00@Z
0000001B 10008157 ?GetValue@CSkinIniFile@@QAE?AVCString@WTL@@ABV23@HAAV23@@Z
0000001C 100083D7 ?GetValueF@CSkinIniFile@@QAENABVCString@WTL@@0@Z
0000001D 10008340 ?GetValueI@CSkinIniFile@@QAEHABVCString@WTL@@0H@Z
0000001E 10007A3A ?ReadFile@CSkinIniFile@@QAE_NABVCString@WTL@@@Z
0000001F 10007CB2 ?ReadFile@CSkinIniFile@@QAE_NPAEH@Z
00000020 10007762 ?ReadProfile@CSkinIniFile@@QAEXABVCString@WTL@@@Z
00000021 100080EC ?Reset@CSkinIniFile@@QAEXXZ
00000022 10007A2B ?SetPath@CSkinIniFile@@QAEXABVCString@WTL@@@Z
00000023 10008452 ?SetValue@CSkinIniFile@@QAE_NABVCString@WTL@@000_N@Z
00000028 10008680 ?SetValueF@CSkinIniFile@@QAE_NABVCString@WTL@@0N_N@Z
00000029 100085D5 ?SetValueI@CSkinIniFile@@QAE_NABVCString@WTL@@0HH_N@Z
0000002A 10007F7E ?WriteFile@CSkinIniFile@@QAEXXZ
0000002B 10008841 ?getline2@CSkinIniFile@@QAEHVCString@WTL@@AAV23@@Z
0000002C 1000897C ?getline@CSkinIniFile@@QAEAAV?$basic_istream@DU?$char_traits@D@std@@@std@@AAV23@AAVCString@WTL@@@Z
0000002D 1003342E ?skinppDrawSkinObject@@YAXPAUHDC__@@UtagRECT@@W4DRAWTYPE@@H@Z
0000002E 1003384E ?skinppGetBitmapRes@@YAPAUHBITMAP__@@PBD@Z
0000002F 10033854 ?skinppGetBitmapResRect@@YAHPBDAAH111@Z
00000030 10033992 ?skinppGetBitmapSize@@YAXPAUHBITMAP__@@AAH1@Z
00000031 100339BC ?skinppGetImageListFromID@@YAPAU_IMAGELIST@@H@Z
00000032 1003341A ?skinppGetMainFrameMenu@@YAPAUHMENU__@@XZ
00000033 10033705 ?skinppGetMultiLangMenu@@YAPAUHMENU__@@XZ
00000034 1003366D ?skinppGetResFromID@@YAPAUHBITMAP__@@W4SKINOBJTYPE@@HH@Z
00000035 10033A4D ?skinppGetResFromID@@YAPAXPAU_ResourceInfo@@@Z
00000036 10033851 ?skinppGetSkinResource@@YAPAEPBDAAH@Z
00000037 100335A1 ?skinppLoadLanguageStr@@YAHPBDPADH@Z
00000038 100331E7 ?skinppLoadSkinFromRes@@YAHPAUHINSTANCE__@@PBD1PAD@Z
00000039 100335A4 ?skinppLoadString@@YAHHPADH@Z
0000003A 10033670 ?skinppSetBackgroundDC@@YAXPAUHWND__@@PAUHDC__@@@Z
0000003B 100339DC ?skinppSetButtonSounds@@YAXPAUHWND__@@PBD1@Z
0000003C 100339DD ?skinppSetButtonTooltip@@YAXPAUHWND__@@PBD@Z
0000003D 100339C8 ?skinppSetCustomDraw@@YAXPAUHWND__@@H@Z
0000003E 100336BE ?skinppSetDialogBkClipRgn@@YAXPAUHWND__@@HH@Z
0000003F 100336AA ?skinppSetDialogEraseBkgnd@@YAXPAUHWND__@@H@Z
00000040 10033404 ?skinppSetDrawMenu@@YAXPAUHMENU__@@H@Z
00000041 10033400 ?skinppSetMenuItemImage@@YAHIPAU_IMAGELIST@@H@Z
00000042 10033A39 ?skinppSetMenuSkinObjectID@@YAXPAUHWND__@@H@Z
00000043 1003383A ?skinppSetNoDrawText@@YAXPAUHWND__@@H@Z
00000044 1003341D ?skinppSetSkinOwnerMenu@@YAXH@Z
00000045 100339BF ?skinppSetStaticFont@@YAHHPBDH@Z
00000046 100339C2 ?skinppSetStaticTextAlign@@YAHHH@Z
00000047 100339C5 ?skinppSetStaticTextColor@@YAHHK@Z
00000048 10033A25 ?skinppSetStatusBarTransparent@@YAXPAUHWND__@@H@Z
00000049 10033680 ?skinppSetTabItemImageID@@YAXPAUHWND__@@HH@Z
00000002 1003303F skinppExitSkin
0000000B 100334D7 skinppGetDefaultSysColor
00000018 100339B9 skinppGetIconFromRes
0000000A 100334CC skinppGetSkinSysColor
00000001 1003303B skinppInitializeSkin
00000003 100330F0 skinppLoadSkin
00000004 1003339D skinppRemoveSkin
00000027 1003352E skinppRemoveSkinHwnd
0000000D 10033555 skinppSetFreeDlgID
00000024 10033A0D skinppSetListBoxItemDrawInfo
00000013 10033620 skinppSetListHeaderCtrlItemID
00000015 1003364A skinppSetListHeaderSortInfo
00000025 100334E2 skinppSetNoSkinHwnd
00000026 100334F6 skinppSetSkinHwnd
0000000E 1003356C skinppSetSkinResID
00000012 100335F7 skinppSetTrackPopupMenuID
0000000C 1003353E skinppSetWindowResID
结果发现我需要的函数
00000038 100331E7 ?skinppLoadSkinFromRes@@YAHPAUHINSTANCE__@@PBD1PAD@Z
竟然是这种形式,但是头文件里声明的是没有问号的。
无论我用
typedef BOOL (*LoadSkinFromRes)(HINSTANCE,LPCTSTR , LPCTSTR ,TCHAR*);
LoadSkinFromRes lsfr=(LoadSkinFromRes)GetProcAddress(hModule,"skinppLoadSkinFromRes");
还是没有?
LoadSkinFromRes lsfr=(LoadSkinFromRes)GetProcAddress(hModule,"skinppLoadSkinFromRes");
。结果都得不到skinppLoadSkinFromRes函数的位置。
有高手可以给解答一下吗。
有没有更好的办法可以把那个dll文件给整合到exe文件中去吗?
[课程]FART 脱壳王!加量不加价!FART作者讲授!