首页
社区
课程
招聘
[原创]IrfanView 4 中 LDF 插件的算法分析
发表于: 2008-1-25 01:19 6204

[原创]IrfanView 4 中 LDF 插件的算法分析

2008-1-25 01:19
6204

IrfanView 是一个很好的图片查看软件,她支持plugin,对图片的处理很方便。
其中有luratech公司的四个插件,分别对应Jpeg2000,Jpm,Ldf,Lwf 格式的支持。

其中tsrh出了,jpeg2000 and jpm两个注册机。大家到网上就可以找到。
但是对ldf and lwf 两个两个插件一直没有看见,可能是用的人不多吧。

这里主要讲LDF格式的插件的算法分析。

主程序和dll都用peid查了一下,发现是upx的壳,用于我这里主要是通过主程序对dll载入后调试。所以可以不用脱壳。用od直接载入。

在od中忽略所有异常,F9直接跑起来。如果有异常,把最后的异常添加到列表中。

打开IrfanView 的 [View]-> [Multipage Image] -> [create multiImage  LDF] 菜单。
再点击[save options]->[show plugin information] 会出现注册框。

随便输入,点击 ok 后,消失。再打开[show plugin information] 发现还是没有注册。

查找注册表,发现内容放在注册表中。

下面很重要哦,打开od的执行模块列表,就是那个E的图标。看到LDF.dll已经载入了。双击,来到ldf.dll的领空。下断 bp RegQueryValueExA。
在IrfanView中点击[show plugin information],od断了下来。Alt+F9,回到ldf的领空。
我这里断在 100012B1  |.  FF15 0CA00410

1000129A  |.  51            push    ecx                              ; /pBufSize
1000129B  |.  8D5424 14     lea     edx, dword ptr [esp+14]          ; |
1000129F  |.  55            push    ebp                              ; |Buffer
100012A0  |.  52            push    edx                              ; |pValueType
100012A1  |.  6A 00         push    0                                ; |Reserved = NULL
100012A3  |.  68 90900510   push    10059090                         ; |luratechldf
100012A8  |.  50            push    eax                              ; |hKey
100012A9  |.  C74424 24 000>mov     dword ptr [esp+24], 100          ; |
100012B1  |.  FF15 0CA00410 call    dword ptr [<&ADVAPI32.RegQueryVa>; \RegQueryValueExA
100012B7  |.  85C0          test    eax, eax                         ;  断在这里
100012B9  |.  74 16         je      short 100012D1                   ;  判断长度是否为0
100012BB  |.  8B4C24 08     mov     ecx, dword ptr [esp+8]
100012BF  |.  51            push    ecx                              ; /hKey
100012C0  |.  FF15 10A00410 call    dword ptr [<&ADVAPI32.RegCloseKe>; \RegCloseKey
100012C6  |.  5F            pop     edi
100012C7  |.  33C0          xor     eax, eax
100012C9  |.  5D            pop     ebp
100012CA  |.  81C4 0C010000 add     esp, 10C
100012D0  |.  C3            retn
100012D1  |>  8B5424 08     mov     edx, dword ptr [esp+8]
100012D5  |.  53            push    ebx
100012D6  |.  56            push    esi
100012D7  |.  52            push    edx                              ; /hKey
100012D8  |.  FF15 10A00410 call    dword ptr [<&ADVAPI32.RegCloseKe>; \RegCloseKey
100012DE  |.  55            push    ebp
100012DF  |.  E8 92820400   call    10049576                         ; 这里面判断不能有小写字符
100012E4  |.  8BFD          mov     edi, ebp
100012E6  |.  83C9 FF       or      ecx, FFFFFFFF
100012E9  |.  33C0          xor     eax, eax
100012EB  |.  83C4 04       add     esp, 4
100012EE  |.  33D2          xor     edx, edx
100012F0  |.  BE 04000000   mov     esi, 4
100012F5  |.  F2:AE         repne   scas byte ptr es:[edi]
100012F7  |.  F7D1          not     ecx
100012F9  |.  49            dec     ecx
100012FA  |.  3BCE          cmp     ecx, esi                         ;  必须大于4位
100012FC  |.  7E 22         jle     short 10001320
100012FE  |.  8D5C24 1C     lea     ebx, dword ptr [esp+1C]
10001302  |.  2BDE          sub     ebx, esi
10001304  |>  8A042E        /mov     al, byte ptr [esi+ebp]          ;  取得第一段的长度
10001307  |.  3C 2D         |cmp     al, 2D
10001309  |.  74 15         |je      short 10001320
1000130B  |.  880433        |mov     byte ptr [ebx+esi], al
1000130E  |.  42            |inc     edx
1000130F  |.  8BFD          |mov     edi, ebp
10001311  |.  83C9 FF       |or      ecx, FFFFFFFF
10001314  |.  33C0          |xor     eax, eax
10001316  |.  46            |inc     esi
10001317  |.  F2:AE         |repne   scas byte ptr es:[edi]
10001319  |.  F7D1          |not     ecx
1000131B  |.  49            |dec     ecx
1000131C  |.  3BF1          |cmp     esi, ecx
1000131E  |.^ 7C E4         \jl      short 10001304
10001320  |>  8D4424 1C     lea     eax, dword ptr [esp+1C]
10001324  |.  C64414 1C 00  mov     byte ptr [esp+edx+1C], 0
10001329  |.  50            push    eax                              ;  这里要注意的是他是取第5位字符到后一个 '-' 的字符串。
1000132A  |.  E8 81EB0300   call    1003FEB0                         ;  要进去,把字符串转换到数字
1000132F  |.  8B9C24 280100>mov     ebx, dword ptr [esp+128]
10001336  |.  83C4 04       add     esp, 4
10001339  |.  8BFD          mov     edi, ebp
1000133B  |.  83C9 FF       or      ecx, FFFFFFFF
1000133E  |.  8903          mov     dword ptr [ebx], eax             ;  后面要的赋值
10001340  |.  33C0          xor     eax, eax
10001342  |.  46            inc     esi
10001343  |.  33D2          xor     edx, edx
10001345  |.  F2:AE         repne   scas byte ptr es:[edi]
10001347  |.  F7D1          not     ecx
10001349  |.  49            dec     ecx
1000134A  |.  3BF1          cmp     esi, ecx
1000134C  |.  7D 19         jge     short 10001367
1000134E  |>  8A0C2E        /mov     cl, byte ptr [esi+ebp]          ;  后一段 复制
10001351  |.  8BFD          |mov     edi, ebp
10001353  |.  884C14 1C     |mov     byte ptr [esp+edx+1C], cl
10001357  |.  42            |inc     edx
10001358  |.  83C9 FF       |or      ecx, FFFFFFFF
1000135B  |.  33C0          |xor     eax, eax
1000135D  |.  46            |inc     esi
1000135E  |.  F2:AE         |repne   scas byte ptr es:[edi]
10001360  |.  F7D1          |not     ecx
10001362  |.  49            |dec     ecx
10001363  |.  3BF1          |cmp     esi, ecx
10001365  |.^ 7C E7         \jl      short 1000134E
10001367  |>  C64414 1C 00  mov     byte ptr [esp+edx+1C], 0
1000136C  |.  8D5424 1C     lea     edx, dword ptr [esp+1C]
10001370  |.  52            push    edx
10001371  |.  E8 3AEB0300   call    1003FEB0                         ;  要进去,把字符串转换到数字
10001376  |.  83C4 04       add     esp, 4
10001379  |.  8943 04       mov     dword ptr [ebx+4], eax           ; 保存值
1000137C  |.  B8 01000000   mov     eax, 1
10001381  |.  5E            pop     esi
10001382  |.  5B            pop     ebx
10001383  |.  5F            pop     edi
10001384  |.  5D            pop     ebp
10001385  |.  81C4 0C010000 add     esp, 10C
1000138B  \.  C3            retn
1003FEB0  /$  53            push    ebx
1003FEB1  |.  55            push    ebp
1003FEB2  |.  56            push    esi
1003FEB3  |.  57            push    edi
1003FEB4  |.  8B7C24 14     mov     edi, dword ptr [esp+14]
1003FEB8  |>  833D CC080610>/cmp     dword ptr [100608CC], 1
1003FEBF  |.  7E 0F         |jle     short 1003FED0
1003FEC1  |.  0FB607        |movzx   eax, byte ptr [edi]
1003FEC4  |.  6A 08         |push    8
1003FEC6  |.  50            |push    eax
1003FEC7  |.  E8 F2220000   |call    100421BE
1003FECC  |.  59            |pop     ecx
1003FECD  |.  59            |pop     ecx
1003FECE  |.  EB 0F         |jmp     short 1003FEDF
1003FED0  |>  0FB607        |movzx   eax, byte ptr [edi]
1003FED3  |.  8B0D C0060610 |mov     ecx, dword ptr [100606C0]       ;  LDF.100606CA
1003FED9  |.  8A0441        |mov     al, byte ptr [ecx+eax*2]
1003FEDC  |.  83E0 08       |and     eax, 8
1003FEDF  |>  85C0          |test    eax, eax
1003FEE1  |.  74 03         |je      short 1003FEE6
1003FEE3  |.  47            |inc     edi
1003FEE4  |.^ EB D2         \jmp     short 1003FEB8
1003FEE6  |>  0FB637        movzx   esi, byte ptr [edi]
1003FEE9  |.  47            inc     edi
1003FEEA  |.  83FE 2D       cmp     esi, 2D                          ;  '-'
1003FEED  |.  8BEE          mov     ebp, esi
1003FEEF  |.  74 05         je      short 1003FEF6
1003FEF1  |.  83FE 2B       cmp     esi, 2B                          ;  '+'
1003FEF4  |.  75 04         jnz     short 1003FEFA
1003FEF6  |>  0FB637        movzx   esi, byte ptr [edi]
1003FEF9  |.  47            inc     edi
1003FEFA  |>  33DB          xor     ebx, ebx                         ;  ebx 清0
1003FEFC  |>  833D CC080610>/cmp     dword ptr [100608CC], 1
1003FF03  |.  7E 0C         |jle     short 1003FF11
1003FF05  |.  6A 04         |push    4
1003FF07  |.  56            |push    esi
1003FF08  |.  E8 B1220000   |call    100421BE
1003FF0D  |.  59            |pop     ecx
1003FF0E  |.  59            |pop     ecx
1003FF0F  |.  EB 0B         |jmp     short 1003FF1C
1003FF11  |>  A1 C0060610   |mov     eax, dword ptr [100606C0]
1003FF16  |.  8A0470        |mov     al, byte ptr [eax+esi*2]
1003FF19  |.  83E0 04       |and     eax, 4
1003FF1C  |>  85C0          |test    eax, eax
1003FF1E  |.  74 0D         |je      short 1003FF2D
1003FF20  |.  8D049B        |lea     eax, dword ptr [ebx+ebx*4]
1003FF23  |.  8D5C46 D0     |lea     ebx, dword ptr [esi+eax*2-30]
1003FF27  |.  0FB637        |movzx   esi, byte ptr [edi]
1003FF2A  |.  47            |inc     edi
1003FF2B  |.^ EB CF         \jmp     short 1003FEFC
1003FF2D  |>  83FD 2D       cmp     ebp, 2D
1003FF30  |.  8BC3          mov     eax, ebx
1003FF32  |.  75 02         jnz     short 1003FF36
1003FF34  |.  F7D8          neg     eax
1003FF36  |>  5F            pop     edi
1003FF37  |.  5E            pop     esi
1003FF38  |.  5D            pop     ebp
1003FF39  |.  5B            pop     ebx
1003FF3A  \.  C3            retn
100606CA  20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00   . . . . . . . .
100606DA  20 00 28 00 28 00 28 00 28 00 28 00 20 00 20 00   .(.(.(.(.(. . .
100606EA  20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00   . . . . . . . .
100606FA  20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00   . . . . . . . .
1006070A  48 00 10 00 10 00 10 00 10 00 10 00 10 00 10 00  H........
1006071A  10 00 10 00 10 00 10 00 10 00 10 00 10 00 10 00  ........
1006072A  84 00 84 00 84 00 84 00 84 00 84 00 84 00 84 00  ????????
1006073A  84 00 84 00 10 00 10 00 10 00 10 00 10 00 10 00  ??......
1006074A  10 00 81 00 81 00 81 00 81 00 81 00 81 00 01 00  .??????.
1006075A  01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00  ........
1006076A  01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00  ........
1006077A  01 00 01 00 01 00 10 00 10 00 10 00 10 00 10 00  ........
1006078A  10 00 82 00 82 00 82 00 82 00 82 00 82 00 02 00  .??????.
1006079A  02 00 02 00 02 00 02 00 02 00 02 00 02 00 02 00  ........
100607AA  02 00 02 00 02 00 02 00 02 00 02 00 02 00 02 00  ........
100607BA  02 00 02 00 02 00 10 00 10 00 10 00 10 00 20 00  ....... .
100606CA  20(00)20    20    20    20    20    20    20      84 & 8 = 0
100606DA  20    28    28    28    28    28    20    20      10 & 8 = 0
100606EA  20    20    20    20    20    20    20    20      81 & 8 = 0
100606FA  20    20    20    20    20    20    20    20      01 & 8 = 0
1006070A  48 sp 10 !  10 "  10 #  10 $  10 %  10 &  10 '    48 & 8 = 8
1006071A  10 (  10 )  10 *  10 +  10 ,  10 -  10 .  10 /     
1006072A  84 0  84 1  84 2  84 3  84 4  84 5  84 6  84 7   
1006073A  84 8  84 9  10 :  10 ;  10 <  10 =  10 >  10 ?    
1006074A  10 @  81 A  81 B  81 C  81 D  81 E  81 F  01 G    
1006075A  01 H  01 I  01 J  01 K  01 L  01 M  01 N  01 O    
1006076A  01 P  01 Q  01 R  01 S  01 T  01 U  01 V  01 W    
1006077A  01 X  01 Y  01 Z  10 [  10 \  10 ]  10 ^  10 _    
1006078A  10 `  82 a  82 b  82 c  82 d  82 e  82 f  02 g    
1006079A  02 h  02 i  02 j  02 k  02 l  02 m  02 n  02 o    
100607AA  02 p  02 q  02 r  02 s  02 t  02 u  02 v  02 w   
100607BA  02 x  02 y  02 z  10 {  10 |  10 }  10 ~  20  
1003FF16  |.  8A0470        |mov     al, byte ptr [eax+esi*2]
1003FF19  |.  83E0 04       |and     eax, 4
1003FF1C  |>  85C0          |test    eax, eax
1003FF1E  |.  74 0D         |je      short 1003FF2D

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 7
支持
分享
最新回复 (1)
雪    币: 192
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
一篇经典的算法分析,可能是曲高和寡吧,回复的人少,支持楼主!
2008-2-1 21:15
0
游客
登录 | 注册 方可回帖
返回
//