baitang36 发表于 2020-10-23 10:43:39

论坛附件修正工具(汇编版)

本帖最后由 baitang36 于 2020-11-25 12:47 编辑

经mokson大侠研究, 明经论坛打不开的图片或附件之中,在文件头开始都加入了“0D 0A”这两个字节,因此jpg,gif,png 等图片不能正确显示,下载的全部压缩附件也打不开,解压提示错误信息。
本程序的作用就是修复下载的附件和图片,让它变成正常的。
使用方法很简单,执行fixmj.exe,选需要修复的文件,点打开。程序会自动备份原来的文件,不用担心修坏了。

链接: https://pan.baidu.com/s/1w16z5RGFXOZstccQcs7LPQ 提取码: 264h
解压缩密码是mjtd
以下为汇编源码,可以用masm32编译

.386
.model flat,stdcall
option casemap:none
include \MASM32\INCLUDE\shell32.inc
include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
include \masm32\include\advapi32.inc
includelib \masm32\lib\advapi32.lib
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
includelib \MASM32\LIB\oleaut32.lib
include \MASM32\include\oleaut32.inc
includelib \MASM32\LIB\shell32.lib
include \masm32\include\comdlg32.inc
includelib \masm32\lib\comdlg32.lib
stralloc MACRO file_ln
         invoke SysAllocStringByteLen,0,file_ln
         ENDM
.data
buffer db 512 dup(0)
newfilename1 db 512 dup(0)
buff1 db 16 dup(0)
buff2 db 16 dup(0)
AppName db "明经论坛附件文件修正工具 ver 1.0 (C)SYZ 2020.10.23",0
mesberr_1 db "欢迎使用明经论坛附件文件修正工具 ver 1.0",0dh,0ah         
          db '山东济南 盛玉增 (baitang36)研制 ',0dh,0ah
          db '联系QQ:5520971',0dh,0ah,0dh,0ah
          db '修正成功!',0
mesberr_2 db '程序错误!',0
br1       dd 20h
          db 0
ofn OPENFILENAME <>
FilterString db "Files (*.*)",0,"*.*",0
               
.data?
hInstance HINSTANCE ?
fhand1 dd ?         ;文件句柄
fhand3 dd ?
file_ln dd ?          ;源文件长度
source$dd ?         ;分配内存开始地址

.code
start:
invoke GetModuleHandle, NULL
mov    hInstance,eax
mov ofn.lStructSize,SIZEOF ofn
mov ofn.lpstrFilter, OFFSET FilterString
mov ofn.lpstrFile, OFFSET buffer
mov ofn.nMaxFile,512
mov ofn.Flags, OFN_FILEMUSTEXIST or OFN_PATHMUSTEXIST or OFN_LONGNAMES or OFN_EXPLORER or OFN_HIDEREADONLY
invoke GetOpenFileName, ADDR ofn
mov esi,OFFSET buffer
mov edi,OFFSET newfilename1
@@:lodsb
   cmp al,0
   jz @f
   stosb
   jmp @b
@@: sub esi,5
   lodsd
   mov edx,eax
   sub edi,4
   mov eax,'kab_'
   stosd
   mov eax,edx
   stosd
   mov al,0
   stosb
   invoke CopyFile, ADDR buffer,ADDR newfilename1,0 ;复制bak文件
   
                           
                   invoke CreateFile,ADDR buffer,                   ;打开
                         GENERIC_READ,
                         FILE_SHARE_WRITE,
                         NULL,OPEN_EXISTING,
                         FILE_ATTRIBUTE_NORMAL,
                         NULL
                        .if eax==INVALID_HANDLE_VALUE
                           jmp nx_3
                        .else
                           mov fhand1,eax
                           .endif
                           invoke GetFileSize,fhand1,NULL
                           mov file_ln , eax
                         stralloc file_ln                                             ;分配内存
                         mov source$, eax
                         invoke ReadFile,fhand1,source$,file_ln,ADDR br1,NULL
                         mov eax,fhand1
                         invoke CloseHandle,eax
                        mov esi,source$
                        lodsw
                        cmp ax,0a0dh
                        jz wfas_1
                        jmp end_1
         
         wfas_1:      
                     lodsb
                     cmp al,20h
                     jnz wfas_2
                     jmp end_1
         wfas_2:               
                      invoke CreateFile,ADDR buffer,;建立文件
                      GENERIC_WRITE,            ; access (read-write) mode
                      FILE_SHARE_READ, ;NULL,                     ; share mode
                      NULL,                     ; pointer to security attributes
                      CREATE_ALWAYS,            ; how to create
                      FILE_ATTRIBUTE_NORMAL,      ; file attributes
                      NULL
                        .if eax==INVALID_HANDLE_VALUE
                           jmp nx_3
                        .else
                           mov fhand3,eax
                        .endif

                     mov edx,file_ln
                     sub edx,2
                     mov ecx,source$
                     add ecx,2
                     invoke WriteFile,fhand3,ecx,edx,ADDR br1,NULL
                     mov eax,fhand3
                     invoke CloseHandle,eax
                     jmp nx_2

   nx_2:invoke MessageBox,NULL,ADDR mesberr_1,ADDR AppName,MB_OK;MB_YESNO
      invoke ExitProcess,eax
               

nx_3:invoke MessageBox,NULL,ADDR mesberr_2,ADDR AppName,MB_OK
          invoke ExitProcess,eax
end_1: jmp @f ;
    no_1 db"文件正常,不需要修正!",0
    @@:invoke MessageBox,NULL,ADDR no_1,ADDR AppName,MB_OK
   invoke ExitProcess,eax
end start
编译工具下载链接: https://pan.baidu.com/s/1-wugzQ_-IH5gfztPDUC3Xg 提取码: dsyy

mokson 发表于 2020-10-24 08:06:18

论坛能人层出不穷,藏龙卧虎。
论坛有难,人人有责。

edata 发表于 2020-10-24 16:28:15

汇编牛x。                                                         

ketxu 发表于 2021-3-29 12:08:29

baitang36 发表于 2020-11-22 16:40
你的邮箱服务器把我给你发的邮件当垃圾退回了,你还有别的邮箱吗?

Thanks for reply. I have found on Internet. But if any useful link, help me send to thattinh01986@yahoo.com.
Thank you sir. I've come back recently ^^

革天明 发表于 2020-10-24 17:13:28

厉害,谢谢楼主分享

伪书虫86 发表于 2020-10-25 23:28:47


难怪打不开呢

明_明 发表于 2020-10-26 12:36:32

果然大牛出手,图片就有。

13916020908 发表于 2020-10-29 15:56:03

真的是太厉害了!

xazjg 发表于 2020-11-6 12:25:35

解压密码不对啊

baitang36 发表于 2020-11-6 16:21:50

xazjg 发表于 2020-11-6 12:25
解压密码不对啊

mjtd
怎么会不对?

xazjg 发表于 2020-11-6 22:34:30

baitang36 发表于 2020-11-6 16:21
mjtd
怎么会不对?

刚试了下,对了
页: [1] 2 3 4
查看完整版本: 论坛附件修正工具(汇编版)