好友
阅读权限40
听众
最后登录1970-1-1
|
本帖最后由 冥界3大法王 于 2019-4-13 17:40 编辑
这是这个贴子的由来:https://www.52pojie.cn/thread-922660-1-1.html
本人最近使用了Delphi 10.3.1注册版,网上这个天价RichViewEdit只有最新的版本才兼容
很无奈,网上只能找到demo版本,而老的PJ版本却无法正常的使用,没办法,请来老魔的OD开始动手术吧。
由于以前分析过,所以知道使用了下面的这个函数
00549473 . 0FB705 7A507D>movzx eax, word ptr ds:[7D507A] ; |
0054947A . 50 push eax ; |Property = 1
0054947B . 8B83 88020000 mov eax, dword ptr ds:[ebx+288] ; |
00549481 . 50 push eax ; |hWnd = 00000001
00549482 . E8 6DD9ECFF call <jmp.&user32.SetPropW> ; \SetPropW
00549487 . 56 push esi ; /hData = NULL
00549488 . 0FB705 78507D>movzx eax, word ptr ds:[7D5078] ; |
0054948F . 50 push eax ; |Property = 1
00549490 . 8B83 88020000 mov eax, dword ptr ds:[ebx+288] ; |
00549496 . 50 push eax ; |hWnd = 00000001
00549497 . E8 58D9ECFF call <jmp.&user32.SetPropW> ; \SetPropW
005F27A6 |. E8 65ACF5FF call Project1.0054D410
005F27AB |. 81E6 FFFFF7FF and esi, FFF7FFFF
005F27B1 |. 56 push esi ; /NewValue = 10000
005F27B2 |. 6A EC push -14 ; |Index = GWL_EXSTYLE
005F27B4 |. 50 push eax ; |hWnd = 0329A020
005F27B5 |. E8 8A49E2FF call <jmp.&user32.SetWindowLongW> ; \SetWindowLongW
005F27BA |. 68 85040000 push 485
005F27BF |. 6A 00 push 0
005F27C1 |. 6A 00 push 0
005F27C3 |. 8BC3 mov eax, ebx
005F27C5 |. E8 46ACF5FF call Project1.0054D410
005F27CA |. 50 push eax ; |hWnd = 0329A020
005F27CB |. E8 3C45E2FF call <jmp.&user32.RedrawWindow> ; \RedrawWindow
005EFE78 |. E8 176BE2FF call <jmp.&user32.FillRect> ; \FillRect
0019F68C 38012961 |hDC = 38012961
0019F690 0019F698 |pRect = 0019F698 {0.,0.,160.,17.}
0019F694 CA1029A6 \hBrush = CA1029A6
先在使用了RichViewEdit 17.6的Delphi 10.3.1里编译输出 EXE文件
然后WinHEX中打开它,搜索richview.com这个网址(千万别搜索TRichView unregistered)
我们会发现 unregistered 这个字符的顺序很有意思,因为后面这个字符串是打乱顺序的加密的
如果从工程文件下手,网上说注册版才有源码,而网上的PJ版本对N多的文件打过了补丁(实在是太多了,上千个)
也就是说一个一个控件文件来打补丁很麻烦,且不好定位到。
所以我们从 左 顶 宽 高 四个坐标 入手 , 搜索字符串常量 A0(十进制的:160),搜索 17的16进制(改成0一样能把水印压扁)
通过EmEditor 几轮过滤
最后发现符合条件的 只有下面两个:
0070E104 push 0A0
007C0963 push 0A0
[Asm] 纯文本查看 复制代码 007C07BC /. 55 push ebp
007C07BD |. 8BEC mov ebp, esp
007C07BF |. 83C4 F0 add esp, -10
007C07C2 |. 832D 7C567D00>sub dword ptr ds:[7D567C], 1
007C07C9 |. 73 6C jnb short Project1.007C0837
007C07CB |. B2 01 mov dl, 1
007C07CD |. A1 F4FE6200 mov eax, dword ptr ds:[62FEF4]
007C07D2 |. E8 F507E7FF call Project1.00630FCC
007C07D7 |. A3 78567D00 mov dword ptr ds:[7D5678], eax
007C07DC |. 8B15 D88A6100 mov edx, dword ptr ds:[618AD8] ; Project1.00618B30
007C07E2 |. A1 78567D00 mov eax, dword ptr ds:[7D5678]
007C07E7 |. E8 B808E7FF call Project1.006310A4
007C07EC |. A1 70315100 mov eax, dword ptr ds:[513170]
007C07F1 |. 8945 F4 mov [local.3], eax
007C07F4 |. A1 443B5100 mov eax, dword ptr ds:[513B44]
007C07F9 |. 8945 F8 mov [local.2], eax
007C07FC |. A1 C4285100 mov eax, dword ptr ds:[5128C4]
007C0801 |. 8945 FC mov [local.1], eax
007C0804 |. 8D45 F4 lea eax, [local.3]
007C0807 |. BA 02000000 mov edx, 2
007C080C |. E8 E7EBC9FF call Project1.0045F3F8
007C0811 |. A1 24415100 mov eax, dword ptr ds:[514124]
007C0816 |. E8 69EBC9FF call Project1.0045F384
007C081B |. A1 A8366000 mov eax, dword ptr ds:[6036A8]
007C0820 |. 8945 F0 mov [local.4], eax
007C0823 |. 8D45 F0 lea eax, [local.4]
007C0826 |. 33D2 xor edx, edx
007C0828 |. E8 CBEBC9FF call Project1.0045F3F8
007C082D |. A1 D88A6100 mov eax, dword ptr ds:[618AD8]
007C0832 |. E8 4DEBC9FF call Project1.0045F384
007C0837 |> 8BE5 mov esp, ebp
007C0839 |. 5D pop ebp ; Project1.005F7AAA
007C083A \. C3 retn
007C083B 90 nop
007C083C . 832D 80567D00>sub dword ptr ds:[7D5680], 1
007C0843 . C3 retn
007C0844 . 832D 88567D00>sub dword ptr ds:[7D5688], 1
007C084B . 73 11 jnb short Project1.007C085E
007C084D . B2 01 mov dl, 1
007C084F . A1 88A46300 mov eax, dword ptr ds:[63A488]
007C0854 . E8 37AFE7FF call Project1.0063B790
007C0859 . A3 84567D00 mov dword ptr ds:[7D5684], eax
007C085E > C3 retn
007C085F 90 nop
007C0860 . 832D 8C567D00>sub dword ptr ds:[7D568C], 1
007C0867 . C3 retn
007C0868 . 832D 90567D00>sub dword ptr ds:[7D5690], 1
007C086F . C3 retn
007C0870 . 832D 94567D00>sub dword ptr ds:[7D5694], 1
007C0877 . 73 20 jnb short Project1.007C0899
007C0879 . 8B15 84396800 mov edx, dword ptr ds:[683984] ; Project1.006839DC
007C087F . B8 32FFFFFF mov eax, -0CE
007C0884 . E8 D371F6FF call Project1.00727A5C
007C0889 . 8B15 BC436800 mov edx, dword ptr ds:[6843BC] ; Project1.00684414
007C088F . B8 31FFFFFF mov eax, -0CF
007C0894 . E8 C371F6FF call Project1.00727A5C
007C0899 > C3 retn
007C089A 8BC0 mov eax, eax
007C089C . 832D 98567D00>sub dword ptr ds:[7D5698], 1
007C08A3 . 73 10 jnb short Project1.007C08B5
007C08A5 . 8B15 A4FB6800 mov edx, dword ptr ds:[68FBA4] ; Project1.0068FBFC
007C08AB . B8 C4FFFFFF mov eax, -3C
007C08B0 . E8 A771F6FF call Project1.00727A5C
007C08B5 > C3 retn
007C08B6 8BC0 mov eax, eax
007C08B8 . 832D 9C567D00>sub dword ptr ds:[7D569C], 1
007C08BF . 73 20 jnb short Project1.007C08E1
007C08C1 . 8B15 E0F36B00 mov edx, dword ptr ds:[6BF3E0] ; Project1.006BF438
007C08C7 . B8 30FFFFFF mov eax, -0D0
007C08CC . E8 8B71F6FF call Project1.00727A5C
007C08D1 . 8B15 48F96B00 mov edx, dword ptr ds:[6BF948] ; Project1.006BF9A0
007C08D7 . B8 2FFFFFFF mov eax, -0D1
007C08DC . E8 7B71F6FF call Project1.00727A5C
007C08E1 > C3 retn
007C08E2 8BC0 mov eax, eax
007C08E4 . 832D A0567D00>sub dword ptr ds:[7D56A0], 1
007C08EB . 73 30 jnb short Project1.007C091D
007C08ED . 8B15 E0956E00 mov edx, dword ptr ds:[6E95E0] ; Project1.006E9638
007C08F3 . B8 34FFFFFF mov eax, -0CC
007C08F8 . E8 5F71F6FF call Project1.00727A5C
007C08FD . 8B15 B8996E00 mov edx, dword ptr ds:[6E99B8] ; Project1.006E9A10
007C0903 . B8 35FFFFFF mov eax, -0CB
007C0908 . E8 4F71F6FF call Project1.00727A5C
007C090D . 8B15 389F6E00 mov edx, dword ptr ds:[6E9F38] ; Project1.006E9F90
007C0913 . B8 33FFFFFF mov eax, -0CD
007C0918 . E8 3F71F6FF call Project1.00727A5C
007C091D > C3 retn
007C091E 8BC0 mov eax, eax
007C0920 . 53 push ebx
007C0921 . 56 push esi ; Project1.<ModuleEntryPoint>
007C0922 . 57 push edi ; Project1.<ModuleEntryPoint>
007C0923 . BE AC567D00 mov esi, Project1.007D56AC
007C0928 . 832D A8567D00>sub dword ptr ds:[7D56A8], 1
007C092F . 0F83 97000000 jnb Project1.007C09CC
007C0935 . A1 4C206600 mov eax, dword ptr ds:[66204C]
007C093A . A3 A4567D00 mov dword ptr ds:[7D56A4], eax
007C093F . 33DB xor ebx, ebx
007C0941 . 33C9 xor ecx, ecx
007C0943 . B2 01 mov dl, 1
007C0945 . A1 08355E00 mov eax, dword ptr ds:[5E3508]
007C094A . E8 09ADE2FF call Project1.005EB658
007C094F . 8906 mov dword ptr ds:[esi], eax
007C0951 . 33D2 xor edx, edx
007C0953 . 8B06 mov eax, dword ptr ds:[esi]
007C0955 . E8 22D1E2FF call Project1.005EDA7C
007C095A . B2 03 mov dl, 3
007C095C . 8B06 mov eax, dword ptr ds:[esi]
007C095E . E8 35D5E2FF call Project1.005EDE98
007C0963 . 68 A0000000 push 0A0 ; 这个A0正好是160,我们改成 68 00000000
007C0968 . 6A 11 push 11 ; 这个11正是 17,经过测试,并不是![color=magenta][u]希望楼下同学能找到传入11的地方。。。[/u][/color]
007C096A . B9 03000000 mov ecx, 3
007C096F . BA 03000000 mov edx, 3
007C0974 . 8B06 mov eax, dword ptr ds:[esi]
007C0976 . 8B38 mov edi, dword ptr ds:[eax]
007C0978 . FF97 C8000000 call dword ptr ds:[edi+C8]
007C097E . 66:BA 6500 mov dx, 65
007C0982 . 8B06 mov eax, dword ptr ds:[esi]
007C0984 . E8 C739D8FF call Project1.00544350
007C0989 . 8B06 mov eax, dword ptr ds:[esi]
007C098B . 8998 64030000 mov dword ptr ds:[eax+364], ebx
007C0991 . C780 60030000>mov dword ptr ds:[eax+360], Project1.007>
007C099B . 8B06 mov eax, dword ptr ds:[esi]
007C099D . 8998 24010000 mov dword ptr ds:[eax+124], ebx
007C09A3 . C780 20010000>mov dword ptr ds:[eax+120], Project1.007>
007C09AD . 8B06 mov eax, dword ptr ds:[esi]
007C09AF . E8 1014E3FF call Project1.005F1DC4
007C09B4 . 8B06 mov eax, dword ptr ds:[esi]
007C09B6 . E8 713DD8FF call Project1.0054472C
007C09BB . 68 2C010000 push 12C ; /Timeout = 300. ms
007C09C0 . E8 DFE4C6FF call <jmp.&kernel32.Sleep> ; \Sleep
007C09C5 . 8B06 mov eax, dword ptr ds:[esi]
007C09C7 . E8 F013E3FF call Project1.005F1DBC
007C09CC > 5F pop edi ; Project1.005F7AAA
007C09CD . 5E pop esi ; Project1.005F7AAA
007C09CE . 5B pop ebx ; Project1.005F7AAA
007C09CF . C3 retn
经过测试,
007C0963 68 A0000000 push 0 ; 修改这个的A0为00 即可解决
断下不远处,便是 0054B235 /EB 25 jmp short Project1.0054B25C 至此水印就简单的去掉了。
当然,我们也可以修改的更宽些,查看学习效果。
比如把这句改成:007C0963 68 96080000 push 896
我们记住特征码,方便对生成的EXE打补丁就好了。(地址和方法)
另外,我们可以模仿来画个水印玩玩。
[Delphi] 纯文本查看 复制代码 procedure TForm1.Button1Click(Sender: TObject);
begin
Canvas.Pen.Width:=10;
Canvas.Pen.Style:=psDash;
Canvas.Pen.Color:=clred;
Canvas.MoveTo(200,100);
Canvas.lineto(300, 200);
Canvas.Pen.Width:=100;
Canvas.Rectangle(50,210,100,100);
end;
实现后的效果,基本与上面的类似。
======================================================================================
另外有意思的是:bp FillRect这个函数,Delphi 7版本中得到的是下面的信息
0019F784 00450EB5 /CALL to FillRect from 信手拈来.00450EB0
0019F788 0D012A59 |hDC = 0D012A59
0019F78C 0019F794 |pRect = 0019F794 {0.,0.,125.,17.} 可能所用的版本不相同,产生的水印大小不同吧。(竟然是125: 7D)
0019F790 491025B1 \hBrush = 491025B1
我们同样上面的操作方式:
0052B064 push 7D
00531871 push 7D
找到两处修改后,水印也成功去除了。
=============================================
最后最后,为了更方便的给虚拟机中编译输出的EXE打补丁,我们使用命令行hextool 工具来搞个批处理一键式完成。
D:\全自动汇编修改\HexTool.exe 信手拈来按键帮你来.exe 1248369 2 6A00
另外还可以从刷子的颜色函数入手进行修改:
0051621C . 50 push eax ; /pLogbrush = 033285D0
0051621D . E8 9A01F0FF call <jmp.&gdi32.CreateBrushIndirect> ; \CreateBrushIndirect
CreateBrushIndirect,可以创建具有指定风格、颜色和模式的逻辑刷子。
中文名CreateBrushIndirect 速 查Windows NT 3.1、Windows 95以上 参 数lplb 函数功能创建指定风格颜色模式逻辑刷子
函数原型:HBRUSH CreateBrushlndirect(CONST LOGBRUSH *lplb);
参数:
lplb:指向LOGBRUSH结构的指针,该结构包含与刷子有关的信息。
返回值:如果函数执行成功,那么返回值标识一个逻辑刷子;如果函数执行失败,则返回值为NULL。
Windows NT:若想获得更多错误信息,请调用GetLastError函数。
备注:刷子就是系统用来对要填充图形的内部进行绘制的位图。
00514E49 |. 50 push eax ; /Index = COLOR_SCROLLBAR
00514E4A |. E8 F51CF0FF call <jmp.&user32.GetSysColor> ; \GetSysColor
掌握的方法越多也就不会黔驴技穷。
|
免费评分
-
查看全部评分
|