设为首页收藏本站喵玉殿官方微博

 找回密码
 少女注册中
搜索
查看: 4962|回复: 2

[编程算法] 图书馆保卫战手记

[复制链接]
发表于 2010-12-18 16:37:37 | 显示全部楼层 |阅读模式
本帖最后由 十二 于 2010-12-19 11:36 编辑

F3打开程序载入 = =


bp CreateFileA 下断直到堆栈窗口显示FileName的名字为td00.dat。

Alt+F9返回

  1. 00412967&#160;&#160;|.&#160;&#160;FF15 6C404500 CALL DWORD PTR DS:[<&KERNEL32.CreateFile>; \CreateFileA
  2. 0041296D&#160;&#160;|.&#160;&#160;8BF0&#160; &#160;&#160; &#160;&#160; &#160; MOV ESI,EAX-----------------------------停在此处
  3. 0041296F&#160;&#160;|.&#160;&#160;83FE FF&#160; &#160;&#160; &#160; CMP ESI,-1
  4. 00412972&#160;&#160;|.&#160;&#160;75 07&#160; &#160;&#160; &#160;&#160; &#160;JNZ SHORT game.0041297B
  5. 00412974&#160;&#160;|.&#160;&#160;32C0&#160; &#160;&#160; &#160;&#160; &#160; XOR AL,AL
  6. 00412976&#160;&#160;|.&#160;&#160;E9 71010000&#160; &#160;JMP game.00412AEC
  7. 0041297B&#160;&#160;|>&#160;&#160;57&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;PUSH EDI
  8. 0041297C&#160;&#160;|.&#160;&#160;68 04010000&#160; &#160;PUSH 104
  9. 00412981&#160;&#160;|.&#160;&#160;55&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;PUSH EBP
  10. 00412982&#160;&#160;|.&#160;&#160;E8 EB710100&#160; &#160;CALL game.00429B72
  11. 00412987&#160;&#160;|.&#160;&#160;8B1D 3C404500 MOV EBX,DWORD PTR DS:[<&KERNEL32.ReadFil>;&#160;&#160;kernel32.ReadFile
  12. 0041298D&#160;&#160;|.&#160;&#160;83C4 0C&#160; &#160;&#160; &#160; ADD ESP,0C
  13. 00412990&#160;&#160;|.&#160;&#160;6A 00&#160; &#160;&#160; &#160;&#160; &#160;PUSH 0&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;; /pOverlapped = NULL
  14. 00412992&#160;&#160;|.&#160;&#160;8D4424 24&#160; &#160;&#160;&#160;LEA EAX,DWORD PTR SS:[ESP+24]&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;; |
  15. 00412996&#160;&#160;|.&#160;&#160;50&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;PUSH EAX&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;; |pBytesRead
  16. 00412997&#160;&#160;|.&#160;&#160;6A 02&#160; &#160;&#160; &#160;&#160; &#160;PUSH 2&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;; |BytesToRead = 2
  17. 00412999&#160;&#160;|.&#160;&#160;8D4C24 24&#160; &#160;&#160;&#160;LEA ECX,DWORD PTR SS:[ESP+24]&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;; |
  18. 0041299D&#160;&#160;|.&#160;&#160;51&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;PUSH ECX&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;; |Buffer
  19. 0041299E&#160;&#160;|.&#160;&#160;56&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;PUSH ESI&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;; |hFile
  20. 0041299F&#160;&#160;|.&#160;&#160;FFD3&#160; &#160;&#160; &#160;&#160; &#160; CALL EBX&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;; \ReadFile
  21. 004129A1&#160;&#160;|.&#160;&#160;6A 00&#160; &#160;&#160; &#160;&#160; &#160;PUSH 0&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;; /pOverlapped = NULL
  22. 004129A3&#160;&#160;|.&#160;&#160;8D5424 24&#160; &#160;&#160;&#160;LEA EDX,DWORD PTR SS:[ESP+24]&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;; |
  23. 004129A7&#160;&#160;|.&#160;&#160;52&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;PUSH EDX&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;; |pBytesRead
  24. 004129A8&#160;&#160;|.&#160;&#160;6A 04&#160; &#160;&#160; &#160;&#160; &#160;PUSH 4&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;; |BytesToRead = 4
  25. 004129AA&#160;&#160;|.&#160;&#160;8D4424 28&#160; &#160;&#160;&#160;LEA EAX,DWORD PTR SS:[ESP+28]&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;; |
  26. 004129AE&#160;&#160;|.&#160;&#160;50&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;PUSH EAX&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;; |Buffer
  27. 004129AF&#160;&#160;|.&#160;&#160;56&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;PUSH ESI&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;; |hFile
  28. 004129B0&#160;&#160;|.&#160;&#160;FFD3&#160; &#160;&#160; &#160;&#160; &#160; CALL EBX&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;; \ReadFile
  29. 004129B2&#160;&#160;|.&#160;&#160;8B4C24 1C&#160; &#160;&#160;&#160;MOV ECX,DWORD PTR SS:[ESP+1C]
  30. 004129B6&#160;&#160;|.&#160;&#160;51&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;PUSH ECX
  31. 004129B7&#160;&#160;|.&#160;&#160;E8 ED380000&#160; &#160;CALL game.004162A9
  32. 004129BC&#160;&#160;|.&#160;&#160;83C4 04&#160; &#160;&#160; &#160; ADD ESP,4
  33. 004129BF&#160;&#160;|.&#160;&#160;6A 00&#160; &#160;&#160; &#160;&#160; &#160;PUSH 0
  34. 004129C1&#160;&#160;|.&#160;&#160;8BF8&#160; &#160;&#160; &#160;&#160; &#160; MOV EDI,EAX
  35. 004129C3&#160;&#160;|.&#160;&#160;8B4424 20&#160; &#160;&#160;&#160;MOV EAX,DWORD PTR SS:[ESP+20]
  36. 004129C7&#160;&#160;|.&#160;&#160;8D5424 24&#160; &#160;&#160;&#160;LEA EDX,DWORD PTR SS:[ESP+24]
  37. 004129CB&#160;&#160;|.&#160;&#160;52&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;PUSH EDX
  38. 004129CC&#160;&#160;|.&#160;&#160;50&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;PUSH EAX
  39. 004129CD&#160;&#160;|.&#160;&#160;57&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;PUSH EDI
  40. 004129CE&#160;&#160;|.&#160;&#160;56&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;PUSH ESI
  41. 004129CF&#160;&#160;|.&#160;&#160;897C24 44&#160; &#160;&#160;&#160;MOV DWORD PTR SS:[ESP+44],EDI
  42. 004129D3&#160;&#160;|.&#160;&#160;FFD3&#160; &#160;&#160; &#160;&#160; &#160; CALL EBX-----------------------给此处下断,注释变为ReadFile,查看堆栈。
  43. 0012FC14&#160; &#160;000000C4
  44. 0012FC18&#160; &#160;010A3F48-------------点此右键跟踪,F8步过CALL EBX。010A3F48被填充为解密的索引表数据
  45. 0012FC1C&#160; &#160;00001D9E
  46. 0012FC20&#160; &#160;0012FC48
  47. 0012FC24&#160; &#160;00000000
  48. 0012FC28&#160; &#160;FDF2EE5F
  49. 0012FC2C&#160; &#160;00400000&#160;&#160;game.00400000

  50. 004129D5&#160;&#160;|.&#160;&#160;56&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;PUSH ESI&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;; /hObject
  51. 004129D6&#160;&#160;|.&#160;&#160;FF15 38404500 CALL DWORD PTR DS:[<&KERNEL32.CloseHandl>; \CloseHandle-----------------关闭句柄
  52. 004129DC&#160;&#160;|.&#160;&#160;8B5C24 1C&#160; &#160;&#160;&#160;MOV EBX,DWORD PTR SS:[ESP+1C]
  53. 004129E0&#160;&#160;|.&#160;&#160;8D43 06&#160; &#160;&#160; &#160; LEA EAX,DWORD PTR DS:[EBX+6]
  54. 004129E3&#160;&#160;|.&#160;&#160;E8 4899FFFF&#160; &#160;CALL game.0040C330
  55. 004129E8&#160;&#160;|.&#160;&#160;33F6&#160; &#160;&#160; &#160;&#160; &#160; XOR ESI,ESI
  56. 004129EA&#160;&#160;|.&#160;&#160;85DB&#160; &#160;&#160; &#160;&#160; &#160; TEST EBX,EBX
  57. 004129EC&#160;&#160;|.&#160;&#160;76 13&#160; &#160;&#160; &#160;&#160; &#160;JBE SHORT game.00412A01
  58. 004129EE&#160;&#160;|.&#160;&#160;8BFF&#160; &#160;&#160; &#160;&#160; &#160; MOV EDI,EDI
  59. 004129F0&#160;&#160;|>&#160;&#160;E8 7B99FFFF&#160; &#160;/CALL game.0040C370-------------索引表解密密匙
  60. 004129F5&#160;&#160;|.&#160;&#160;30043E&#160; &#160;&#160; &#160;&#160;&#160;|XOR BYTE PTR DS:[ESI+EDI],AL
  61. 004129F8&#160;&#160;|.&#160;&#160;83C6 01&#160; &#160;&#160; &#160; |ADD ESI,1
  62. 004129FB&#160;&#160;|.&#160;&#160;3B7424 1C&#160; &#160;&#160;&#160;|CMP ESI,DWORD PTR SS:[ESP+1C]
  63. 004129FF&#160;&#160;|.^ 72 EF&#160; &#160;&#160; &#160;&#160; &#160;\JB SHORT game.004129F0-------------循环解密
  64. 00412A01&#160;&#160;|>&#160;&#160;66:837C24 18 >CMP WORD PTR SS:[ESP+18],0-------------下断此处F9运行得到010A3F48解密后的索引表。
  65. 00412A07&#160;&#160;|.&#160;&#160;8BF7&#160; &#160;&#160; &#160;&#160; &#160; MOV ESI,EDI
  66. 00412A09&#160;&#160;|.&#160;&#160;C74424 24 000>MOV DWORD PTR SS:[ESP+24],0
  67. 00412A11&#160;&#160;|.&#160;&#160;0F86 CA000000 JBE game.00412AE1
  68. 00412A17&#160;&#160;|.&#160;&#160;81C5 04010000 ADD EBP,104
  69. 00412A1D&#160;&#160;|.&#160;&#160;896C24 2C&#160; &#160;&#160;&#160;MOV DWORD PTR SS:[ESP+2C],EBP
  70. 00412A21&#160;&#160;|> /8B1E&#160; &#160;&#160; &#160;&#160; &#160; /MOV EBX,DWORD PTR DS:[ESI]
  71. 00412A23 &#160;|. |8B4E 04&#160; &#160;&#160; &#160; |MOV ECX,DWORD PTR DS:[ESI+4]
  72. 00412A26&#160;&#160;|. |83C6 04&#160; &#160;&#160; &#160; |ADD ESI,4
  73. 00412A29&#160;&#160;|. |8A46 04&#160; &#160;&#160; &#160; |MOV AL,BYTE PTR DS:[ESI+4]
  74. 00412A2C&#160;&#160;|. |83C6 04&#160; &#160;&#160; &#160; |ADD ESI,4
  75. 00412A2F&#160;&#160;|. |0FB6F8&#160; &#160;&#160; &#160;&#160;&#160;|MOVZX EDI,AL
  76. 00412A32&#160;&#160;|. |57&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;|PUSH EDI
  77. 00412A33&#160;&#160;|. |83C6 01&#160; &#160;&#160; &#160; |ADD ESI,1
  78. 00412A36&#160;&#160;|. |8D5424 50&#160; &#160;&#160;&#160;|LEA EDX,DWORD PTR SS:[ESP+50]
  79. 00412A3A&#160;&#160;|. |56&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;|PUSH ESI
  80. 00412A3B&#160;&#160;|. |52&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;|PUSH EDX
  81. 00412A3C&#160;&#160;|. |894C24 34&#160; &#160;&#160;&#160;|MOV DWORD PTR SS:[ESP+34],ECX
  82. 00412A40&#160;&#160;|. |E8 0B810100&#160; &#160;|CALL game.0042AB50
  83. 00412A45&#160;&#160;|. |83C4 0C&#160; &#160;&#160; &#160; |ADD ESP,0C
  84. 00412A48&#160;&#160;|. |8D4424 4C&#160; &#160;&#160;&#160;|LEA EAX,DWORD PTR SS:[ESP+4C]
  85. 00412A4C&#160;&#160;|. |C6443C 4C 00&#160;&#160;|MOV BYTE PTR SS:[ESP+EDI+4C],0
  86. 00412A51&#160;&#160;|. |03F7&#160; &#160;&#160; &#160;&#160; &#160; |ADD ESI,EDI
  87. 00412A53&#160;&#160;|. |8D78 01&#160; &#160;&#160; &#160; |LEA EDI,DWORD PTR DS:[EAX+1]
  88. 00412A56&#160;&#160;|> |8A08&#160; &#160;&#160; &#160;&#160; &#160; |/MOV CL,BYTE PTR DS:[EAX]
  89. 00412A58&#160;&#160;|. |83C0 01&#160; &#160;&#160; &#160; ||ADD EAX,1
  90. 00412A5B&#160;&#160;|. |84C9&#160; &#160;&#160; &#160;&#160; &#160; ||TEST CL,CL
  91. 00412A5D&#160;&#160;|.^|75 F7&#160; &#160;&#160; &#160;&#160; &#160;|\JNZ SHORT game.00412A56
  92. 00412A5F&#160;&#160;|. |2BC7&#160; &#160;&#160; &#160;&#160; &#160; |SUB EAX,EDI
  93. 00412A61&#160;&#160;|. |8D68 01&#160; &#160;&#160; &#160; |LEA EBP,DWORD PTR DS:[EAX+1]
  94. 00412A64&#160;&#160;|. |55&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;|PUSH EBP
  95. 00412A65&#160;&#160;|. |E8 3F380000&#160; &#160;|CALL game.004162A9
  96. 00412A6A&#160;&#160;|. |8BF8&#160; &#160;&#160; &#160;&#160; &#160; |MOV EDI,EAX
  97. 00412A6C&#160;&#160;|. |83C4 04&#160; &#160;&#160; &#160; |ADD ESP,4
  98. 00412A6F&#160;&#160;|. |8D4424 4C&#160; &#160;&#160;&#160;|LEA EAX,DWORD PTR SS:[ESP+4C]
  99. 00412A73&#160;&#160;|. |50&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;|PUSH EAX
  100. 00412A74&#160;&#160;|. |55&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;|PUSH EBP
  101. 00412A75&#160;&#160;|. |57&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;|PUSH EDI
  102. 00412A76&#160;&#160;|. |897C24 40&#160; &#160;&#160;&#160;|MOV DWORD PTR SS:[ESP+40],EDI
  103. 00412A7A&#160;&#160;|. |E8 F3700100&#160; &#160;|CALL game.00429B72
  104. 00412A7F&#160;&#160;|. |8B4C24 34&#160; &#160;&#160;&#160;|MOV ECX,DWORD PTR SS:[ESP+34]
  105. 00412A83&#160;&#160;|. |83C4 0C&#160; &#160;&#160; &#160; |ADD ESP,0C
  106. 00412A86&#160;&#160;|. |894C24 38&#160; &#160;&#160;&#160;|MOV DWORD PTR SS:[ESP+38],ECX
  107. 00412A8A&#160;&#160;|. |895C24 3C&#160; &#160;&#160;&#160;|MOV DWORD PTR SS:[ESP+3C],EBX
  108. 00412A8E&#160;&#160;|. |8B4C24 2C&#160; &#160;&#160;&#160;|MOV ECX,DWORD PTR SS:[ESP+2C]
  109. 00412A92&#160;&#160;|. |8D5424 34&#160; &#160;&#160;&#160;|LEA EDX,DWORD PTR SS:[ESP+34]
  110. 00412A96&#160;&#160;|. |52&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;|PUSH EDX&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;; /Arg3
  111. 00412A97&#160;&#160;|. |8D4424 44&#160; &#160;&#160;&#160;|LEA EAX,DWORD PTR SS:[ESP+44]&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;; |
  112. 00412A9B&#160;&#160;|. |50&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;|PUSH EAX&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;; |Arg2
  113. 00412A9C&#160;&#160;|. |51&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;|PUSH ECX&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160;; |Arg1
  114. 00412A9D&#160;&#160;|. |C78424 680100>|MOV DWORD PTR SS:[ESP+168],0&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;; |
  115. 00412AA8&#160;&#160;|. |E8 23030000&#160; &#160;|CALL game.00412DD0&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160; ; \game.00412DD0
  116. 00412AAD&#160;&#160;|. |85FF&#160; &#160;&#160; &#160;&#160; &#160; |TEST EDI,EDI
  117. 00412AAF&#160;&#160;|. |C78424 5C0100>|MOV DWORD PTR SS:[ESP+15C],-1
  118. 00412ABA&#160;&#160;|. |74 09&#160; &#160;&#160; &#160;&#160; &#160;|JE SHORT game.00412AC5
  119. 00412ABC&#160;&#160;|. |57&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;|PUSH EDI
  120. 00412ABD&#160;&#160;|. |E8 C46C0100&#160; &#160;|CALL game.00429786
  121. 00412AC2&#160;&#160;|. |83C4 04&#160; &#160;&#160; &#160; |ADD ESP,4
  122. 00412AC5&#160;&#160;|> |8B4424 24&#160; &#160;&#160;&#160;|MOV EAX,DWORD PTR SS:[ESP+24]
  123. 00412AC9&#160;&#160;|. |0FB75424 18&#160; &#160;|MOVZX EDX,WORD PTR SS:[ESP+18]
  124. 00412ACE&#160;&#160;|. |83C0 01&#160; &#160;&#160; &#160; |ADD EAX,1
  125. 00412AD1&#160;&#160;|. |3BC2&#160; &#160;&#160; &#160;&#160; &#160; |CMP EAX,EDX
  126. 00412AD3&#160;&#160;|. |894424 24&#160; &#160;&#160;&#160;|MOV DWORD PTR SS:[ESP+24],EAX
  127. 00412AD7&#160;&#160;|.^\0F82 44FFFFFF \JB game.00412A21

复制代码





已经完了 - =。。。。。。。。。。。随后的文件解密两次CreateFile后会有SetFilePointer。。。。。。

和ZUN的解包是一样的 = = 和FXTZ的解包和封包器通用 = =
发表于 2010-12-18 17:22:14 | 显示全部楼层
这个是图书馆战的代码……
想不到玩是挺爽的,实际背后是这么……复杂的……
回复

使用道具 举报

发表于 2010-12-18 18:13:04 | 显示全部楼层
汇编没学好结果看不懂了,回去复习
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 少女注册中

本版积分规则

合作与事务联系|无图版|手机版|小黑屋|喵玉殿

GMT+8, 2025-10-31 07:16

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表