-
-
[原创]静态库的逆向
-
发表于: 2015-4-7 19:27 4006
-
得到一个工具的SDK开发包,开发出来的程序必须要有正确的许可证才能正常运行,所以想对SDK里面的lib进行逆向破解。
使用VC命令行的工具
lib.exe /list TSMDd.lib > TSMDd.txt //获得静态库里面的.obj
lib TSMDd.lib /EXTRACT:TSMDd.obj //导出.obj
dumpbin.exe/ALL TsLib.obj > TsLib.txt //获得obj里面的结构
dumpbin.exe /disasm TsLib.obj > TsLib-asm.txt //反汇编
分析汇编代码(代码主要结构先编译了一个应用程序,使用OD跟踪过大概流程)
00000092: E8 00 00 00 00 call ?Decrypt@Decrypter@Dtapi@@QAEIQAE@Z
00000097: 85 C0 test eax,eax
00000099: 75 51 jne 000000EC //判断跳转
0000009B: 81 7B 10 1F 03 3B cmp dword ptr [ebx+10h],0DE3B031Fh
DE
000000A2: 75 48 jne 000000EC //判断跳转
000000A4: 8B 45 D0 mov eax,dword ptr [ebp-30h]
000000A7: 8B 4D D4 mov ecx,dword ptr [ebp-2Ch]
000000AA: 0F AC C8 0A shrd eax,ecx,0Ah
000000AE: C1 E9 0A shr ecx,0Ah
000000B1: 81 E1 FF 3F 00 00 and ecx,3FFFh
000000B7: 3B 43 08 cmp eax,dword ptr [ebx+8]
000000BA: 75 30 jne 000000EC //判断跳转
000000BC: 3B 4B 0C cmp ecx,dword ptr [ebx+0Ch]
000000BF: 75 2B jne 000000EC
000000C1: 68 00 3D 05 00 push 53D00h
000000C6: E8 00 00 00 00 call ??2@YAPAXI@Z
000000CB: 83 C4 04 add esp,4
000000CE: 89 45 A4 mov dword ptr [ebp-5Ch],eax
找到对应的汇编指令到,需要16进制修改lib的内容。
根据TsLib.txt 文件查找偏移地址
SECTION HEADER #109
.text name
0 physical address
0 virtual address
11A size of raw data
5350 file pointer to raw data (00005350 to 00005469)
546A file pointer to relocation table
0 file pointer to line numbers
C number of relocations
0 number of line numbers
60501020 flags
Code
COMDAT; sym= "public: class apiTs::TsInfo * __thiscall apiTs::TsLib::CreateTsInfoInstance(void)" (?CreateTsInfoInstance@TsLib@apiTs@@QAEPAVTsInfo@2@XZ)
16 byte align
Execute Read
可知起始地址是00005350.
修改TsLib.obj 里面对应地址的数据。
按照相同的内容查找lib库里面对应的位置,修改16进制内容即可。
使用VC命令行的工具
lib.exe /list TSMDd.lib > TSMDd.txt //获得静态库里面的.obj
lib TSMDd.lib /EXTRACT:TSMDd.obj //导出.obj
dumpbin.exe/ALL TsLib.obj > TsLib.txt //获得obj里面的结构
dumpbin.exe /disasm TsLib.obj > TsLib-asm.txt //反汇编
分析汇编代码(代码主要结构先编译了一个应用程序,使用OD跟踪过大概流程)
00000092: E8 00 00 00 00 call ?Decrypt@Decrypter@Dtapi@@QAEIQAE@Z
00000097: 85 C0 test eax,eax
00000099: 75 51 jne 000000EC //判断跳转
0000009B: 81 7B 10 1F 03 3B cmp dword ptr [ebx+10h],0DE3B031Fh
DE
000000A2: 75 48 jne 000000EC //判断跳转
000000A4: 8B 45 D0 mov eax,dword ptr [ebp-30h]
000000A7: 8B 4D D4 mov ecx,dword ptr [ebp-2Ch]
000000AA: 0F AC C8 0A shrd eax,ecx,0Ah
000000AE: C1 E9 0A shr ecx,0Ah
000000B1: 81 E1 FF 3F 00 00 and ecx,3FFFh
000000B7: 3B 43 08 cmp eax,dword ptr [ebx+8]
000000BA: 75 30 jne 000000EC //判断跳转
000000BC: 3B 4B 0C cmp ecx,dword ptr [ebx+0Ch]
000000BF: 75 2B jne 000000EC
000000C1: 68 00 3D 05 00 push 53D00h
000000C6: E8 00 00 00 00 call ??2@YAPAXI@Z
000000CB: 83 C4 04 add esp,4
000000CE: 89 45 A4 mov dword ptr [ebp-5Ch],eax
找到对应的汇编指令到,需要16进制修改lib的内容。
根据TsLib.txt 文件查找偏移地址
SECTION HEADER #109
.text name
0 physical address
0 virtual address
11A size of raw data
5350 file pointer to raw data (00005350 to 00005469)
546A file pointer to relocation table
0 file pointer to line numbers
C number of relocations
0 number of line numbers
60501020 flags
Code
COMDAT; sym= "public: class apiTs::TsInfo * __thiscall apiTs::TsLib::CreateTsInfoInstance(void)" (?CreateTsInfoInstance@TsLib@apiTs@@QAEPAVTsInfo@2@XZ)
16 byte align
Execute Read
可知起始地址是00005350.
修改TsLib.obj 里面对应地址的数据。
按照相同的内容查找lib库里面对应的位置,修改16进制内容即可。
赞赏
看原图
赞赏
雪币:
留言: