Gemini.

Тема в разделе "WASM.RESEARCH", создана пользователем Ahimov, 23 ноя 2025.

  1. Ahimov

    Ahimov Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2024
    Сообщения:
    482
    Привет.

    Решил немного пореверсить. Взял этот мотор, декодер сегментов.

    Код (Text):
    1. MODRM_MOD_MASK equ 11000000B
    2. MODRM_REG_MASK equ 00111000B
    3. MODRM_RM_MASK equ 00000111B
    4. SIB_SCALE_MASK equ 11000000B
    5. SIB_INDEX_MASK equ 00111000B
    6. SIB_BASE_MASK equ 00000111B
    7. OP_ESC_2B equ 0FH
    8. OP_BOUND equ 62H
    9. OP_ARPL equ 63H
    10. OP_IMUL4 equ 69H
    11. OP_IMUL1 equ 6BH
    12. OP_INSB equ 6CH
    13. OP_INSD equ 6DH
    14. OP_OUTSB equ 6EH
    15. OP_OUTSD equ 6FH
    16. OP_INT equ 0CDH
    17. OP_XLAT equ 0D7H
    18. OP_LAR equ 2
    19. OP_LSL equ 3
    20. OP_CMOVcc equ 40H
    21. OP_SETcc equ 90H
    22. OP_BT equ 0A3H
    23. OP_BTS equ 0ABH
    24. OP_BTC equ 0BBH
    25. OVSEG_DS equ 1
    26. OVSEG_SS equ 2
    27. OVSEG_ES equ 3
    28. OVSEG_XY equ 4 ; MOVS, CMPS(Es:[Edi], Ds:[Esi])
    29. QueryOverrideSegment proc Ip:PVOID, Pfx16:BOOLEAN
    30. mov edx,Ip
    31. movzx eax,byte ptr [edx]
    32. ;
    33. ; One-byte opcode map. E/O codes for ModRM field.
    34. ;   0123456789ABCDEF
    35. ; 0 1111000011110000
    36. ; 1 1111000011110000
    37. ; 2 1111000011110000
    38. ; 3 1111000011110000
    39. ; 4 0000000000000000
    40. ; 5 0000000000000000
    41. ; 6 0011000001010000
    42. ; 7 0000000000000000
    43. ; 8 1111111111111010
    44. ; 9 0000000000000000
    45. ; A 0000000000000000
    46. ; B 0000000000000000
    47. ; C 1100110000000000
    48. ; D 1111000000000000
    49. ; E 0000000000000000
    50. ; F 0000000000000000
    51. ;
    52. push 00000000000000000000000000000000B
    53. push 00000000000011110000000000110011B
    54. push 00000000000000000000000000000000B
    55. push 00000000000000000101111111111111B
    56. push 00000000000000000000101000001100B
    57. push 00000000000000000000000000000000B
    58. push 00001111000011110000111100001111B
    59. push 00001111000011110000111100001111B
    60. cmp al,OP_ESC_2B
    61. ;
    62. ; Two-byte opcode map. E code for ModRM field.
    63. ;   0123456789ABCDEF
    64. ; 0 0011000000000100
    65. ; 1 0000000000000001
    66. ; 2 0000000000000000
    67. ; 3 0000000000000000
    68. ; 4 1111111111111111
    69. ; 5 0000000000000000
    70. ; 6 0000000000000000
    71. ; 7 0000000000000000
    72. ; 8 0000000000000000
    73. ; 9 1111111111111111
    74. ; A 0001110000011101
    75. ; B 1111111100011111
    76. ; C 1100000000000000
    77. ; D 0000000000000000
    78. ; E 0000000000000000
    79. ; F 0000000000000000
    80. ;
    81. push 00000000000000000000000000000000B
    82. push 00000000000000000000000000000011B
    83. push 11111000111111111011100000111000B
    84. push 11111111111111110000000000000000B
    85. push 00000000000000000000000000000000B
    86. push 00000000000000001111111111111111B
    87. push 00000000000000000000000000000000B
    88. push 10000000000000000010000000001100B
    89. mov ecx,eax
    90. je Esc2B ; 2-byte escape.
    91. shr eax,5
    92. and cl,31
    93. bt dword ptr [esp + eax*4 + 8*4],ecx
    94. jc ModRM1
    95. mov al,byte ptr [edx]
    96. sub al,6CH
    97. jb NoSeg1
    98. sub al,2
    99. jbe SegEs1 ; INS
    100. sub al,2
    101. jbe SegDs1 ; OUTS
    102. sub al,(8FH - 6CH - 4)
    103. jb NoSeg1
    104. .if Zero?
    105. ExtsGrp1A:
    106. ; Grp 1A
    107.    test byte ptr [edx + 1],MODRM_REG_MASK ; ModR/M
    108.    jnz NoSeg1
    109.    jmp ModRM1
    110. .endif
    111. sub al,(0A0H - 8FH)
    112. jb NoSeg1
    113. sub al,3
    114. jbe SegDs1 ; MOV
    115. sub al,4
    116. jbe SegXY ; MOVS, CMPS
    117. sub al,2
    118. jbe NoSeg1
    119. sub al,2
    120. jbe SegEs1 ; STOS
    121. sub al,2
    122. jbe SegDs1 ; LODS
    123. sub al,2
    124. jbe SegEs1 ; SCAS
    125. sub al,(0C6H - 0AFH)
    126. jb NoSeg1
    127. sub al,2
    128. jbe ExtsGrp1A ; Grp 11
    129. sub al,(OP_XLAT - 0C8H)
    130. jz SegDs1 ; XLAT ???
    131. jb NoSeg1
    132. sub al,(0F6H - OP_XLAT)
    133. jb NoSeg1
    134. sub al,2
    135. ja @f
    136. ; Grp 3
    137. mov al,byte ptr [edx + 1] ; ModR/M
    138. and al,111000B
    139. cmp al,001000B
    140. jne ModRM1
    141. NoSeg1:
    142. jmp NoSeg2
    143. SegDs1:
    144. jmp SegDs2
    145. SegEs1:
    146. jmp SegEs
    147. ModRM1:
    148. jmp ModRM2
    149. @@:
    150. sub al,(0FEH - 0F6H - 2)
    151. jb NoSeg2
    152. jnz @f
    153. ExtsGrp4:
    154. ; Grp 4
    155. mov al,byte ptr [edx + 1] ; ModR/M
    156. and al,MODRM_REG_MASK
    157. cmp al,001000B
    158. jbe ModRM1 ; INC, DEC
    159. jmp NoSeg1
    160. @@:
    161. ; Grp 5
    162. mov al,byte ptr [edx + 1] ; ModR/M
    163. and al,MODRM_REG_MASK
    164. cmp al,111000B
    165. je NoSeg
    166. jmp ModRM1
    167. Esc2B:
    168. movzx eax,byte ptr [edx + 1]
    169. mov ecx,eax
    170. inc edx
    171. shr eax,5
    172. and cl,31
    173. bt dword ptr [esp + eax*4],ecx
    174. jc ModRM1
    175. mov al,byte ptr [edx]
    176. .if !al
    177. ; Grp 6
    178.    mov al,byte ptr [edx + 1] ; ModR/M
    179.      and al,MODRM_REG_MASK
    180.    cmp al,110000B
    181.    jb ModRM1
    182. NoSeg2:
    183.    jmp NoSeg
    184. SegDs2:
    185. jmp SegDs
    186. .endif
    187. dec al
    188. .if Zero?
    189. ; Grp 7
    190.    mov al,byte ptr [edx + 1]
    191.    and al,MODRM_REG_MASK
    192.    cmp al,101000B
    193.    je NoSeg
    194. ModRM2:
    195.    jmp ModRM
    196. .endif
    197. sub al,(0AEH - 1)
    198. ; Grp 15 -> 4
    199. jz ExtsGrp4
    200. sub al,(0BAH - 0AEH)
    201. .if Zero?
    202. ; Grp 8
    203.    mov al,byte ptr [edx + 1]
    204.    and al,MODRM_REG_MASK
    205.    cmp al,100000B
    206.    jb NoSeg
    207.    jmp ModRM
    208. .endif
    209. sub al,(0C7H - 0BAH)
    210. jnz NoSeg
    211. ; Grp 9
    212. mov al,byte ptr [edx + 1]
    213. and al,MODRM_REG_MASK
    214. cmp al,001000B
    215. je ModRM ; CMPXCHG8B
    216. NoSeg:
    217. xor eax,eax
    218. jmp Exit
    219. SegDs:
    220. mov al,OVSEG_DS
    221. jmp Exit
    222. SegSs:
    223. mov al,OVSEG_SS
    224. jmp Exit
    225. SegEs:
    226. mov al,OVSEG_ES
    227. jmp Exit
    228. SegXY:
    229. mov al,OVSEG_XY
    230. Exit:
    231. movzx eax,al
    232. add esp,32*2
    233. ret
    234. ModRM:
    235. mov al,byte ptr [edx + 1] ; ModR/M
    236. mov ah,byte ptr [edx + 1]
    237. and al,MODRM_MOD_MASK
    238. and ah,MODRM_RM_MASK ; R/M
    239. rol al,2 ; MOD
    240. cmp al,11B
    241. je NoSeg
    242. .if !Pfx16
    243. ; x32
    244.    sub ah,3
    245.    jbe SegDs
    246.    dec ah
    247.    .if Zero? ; SIB
    248.       mov al,byte ptr [edx + 2] ; SIB
    249.       and al,SIB_BASE_MASK
    250.       sub al,100B ; Esp
    251.       jz SegSs
    252.       dec al
    253.       jz SegSs
    254.       jmp SegDs
    255.    .endif
    256.    dec ah
    257.    jnz SegDs ; Esi/Edi
    258.    test al,al
    259.    jz SegDs ; Disp32
    260.    jmp SegSs ; Ebp
    261. .else
    262. ; x16
    263.    sub ah,2
    264.    jbe SegDs
    265.    sub ah,2
    266.    jbe SegSs ; Bp
    267.    sub ah,2
    268.    jbe SegDs
    269.    dec ah
    270.    jnz SegDs ; Bx
    271.    test al,al
    272.    jz SegDs ; Disp16
    273.    jmp SegSs ; Bp
    274. .endif
    275. QueryOverrideSegment endp
    Дамп.

    После небольших подсказок и просьбы оптимизации, выхлоп такой:

    Код (Text):
    1. ; FASM (Flat Assembler) - 32-bit flat binary
    2.  
    3. MODRM_MOD_MASK      = 11000000B
    4. MODRM_RM_MASK       = 00000111B
    5.  
    6. OVSEG_DS            = 0x0
    7. OVSEG_SS            = 0x1
    8. OVSEG_CS            = 0x2
    9. OVSEG_ES            = 0x3
    10. OVSEG_XY            = 0x4
    11.  
    12. section '.data' data readable writeable
    13. TwoByteMap_Data:
    14. dd 0x0, 0x000F0033, 0x0, 0x00005FFF, 0x00000A0C, 0x0
    15.     dd 00000000000000000000000000000000B
    16.     dd 00000000000000000000000000000011B
    17.     dd 11111000111111111011100000111000B
    18.     dd 11111111111111110000000000000000B
    19.     dd 0x0
    20.     dd 00000000000000001111111111111111B
    21.     dd 0x0
    22.     dd 10000000000000000010000000001100B
    23. OneByteMap_Data:
    24.     dd 11110000111100001111000011110000B ; Opcode 0x00 - 0x1F
    25.     dd 11110000111100001111000011110000B
    26.  
    27.  
    28. section '.text' code readable executable
    29. entry start
    30.  
    31. start:
    32. sub_0:
    33.     push ebp              ; Пролог
    34.     mov ebp, esp
    35.     mov edx, [ebp+0x8]    ; EDX = IP
    36.     movzx eax, byte [edx] ; EAX = Opcode
    37.     mov ecx, eax
    38. cmp al, 0x0F          ; Проверка: двухбайтовый опкод (0x0F)?
    39.     je loc_DA             ; Jcc/ModR/M опкоды
    40.  
    41.     shr eax, 0x5          ; Подготовка индекса для битового теста
    42.     and cl, 0x1F          ; Подготовка бита
    43.  
    44.     bt [OneByteMap_Data+eax*4], ecx ; Проверка опкодов 0x00-0x1F
    45.     jb ModRM_CHECK        ; Если бит установлен, требуется ModR/M анализ
    46.  
    47. ; --- Анализ диапазонов (RANGE_CHECK) ---
    48.     mov al, [edx]
    49.     sub al, 0x6C          ; Opcode > 0x6B
    50.     jb loc_130_DS         ; Jmp (0x00-0x6B) -> DS (Default)
    51. sub al, 0x2           ; Opcode 0x6C, 0x6D (INS/OUTS)
    52.     jbe SegSs_RET         ; JBE -> SS
    53.  
    54.     sub al, 0x2           ; Opcode 0x70 - 0x7F (Короткие Jcc)
    55.     jbe loc_138_CS        ; JBE -> CS
    56.  
    57.     sub al, 0x1F          ; Opcode 0x80 - 0x86 (Grp 1/2/3)
    58.     jb loc_130_DS         ; JB -> DS
    59.     jne loc_77            ; JNE Opcode 0x87 (XCHG mem/reg)
    60.  
    61.     test byte [edx+0x1], 0x38 ; Проверка Opcode 0x87: REG-поле ModR/M
    62.     jne loc_130_DS        ; JNE -> DS
    63.     jmp ModRM_CHECK       ; JMP -> ModR/M анализ
    64.  
    65.  
    66.  
    67.  
    68.  
    69.  
    70. K       ; JMP -> ModR/M анализ
    71.  
    72. loc_77:
    73.     sub al, 0x11          ; Opcode 0xA0 - 0xA3 (MOV AL/AX, mem)
    74.     jb loc_130_DS         ; JB -> DS
    75.     sub al, 0x3           ; Opcode 0xA4, 0xA5 (MOVS)
    76.     jbe loc_138_CS        ; JBE -> CS (или ES, но CS для кода)
    77.     sub al, 0x4           ; Opcode 0xA6, 0xA7 (CMPS, SCAS)
    78.     jbe loc_140_XY        ; JBE -> XY (ES/DS для строковых)
    79.  
    80.     sub al, 0x2           ; Opcode 0xA8, 0xA9 (TEST, MOV AL, imm)
    81.     jbe loc_130_DS        ; JBE -> DS
    82.     sub al, 0x2           ; Opcode 0xAA, 0xAB (STOS)
    83.     jbe SegSs_RET         ; JBE -> SS (или ES, но SS для стека)
    84.     sub al, 0x2           ; Opcode 0xAC, 0xAD (LODS)
    85.     jbe loc_138_CS        ; JBE -> CS
    86.     sub al, 0x2           ; Opcode 0xAE, 0xAF (SCAS, CMPS)
    87.     jbe SegSs_RET         ; JBE -> SS
    88. sub al, 0x17          ; Opcode 0xC0 - 0xDF (CALL/RET, LOOP, Grp 4/5)
    89.     jb loc_130_DS         ; JB -> DS
    90.     sub al, 0x2           ; Opcode 0xE0-0xE3 (LOOP)
    91.     jbe loc_130_DS        ; JBE -> DS
    92.  
    93.     sub al, 0x0F          ; Opcode 0xF0 - 0xF7 (LOCK/REP, Grp 3)
    94.     jz loc_138_CS         ; JZ -> CS (LOCK/REP)
    95.     jb loc_130_DS         ; JB -> DS
    96.     sub al, 0x1F          ; Opcode 0xF8 - 0xFA (CLC, STI)
    97.     jb loc_130_DS         ; JB -> DS
    98.     sub al, 0x2           ; Opcode 0xFB - 0xFF (HLT, Grp 5/6)
    99.     ja ModRM_CHECK        ; JA -> ModR/M анализ
    100.  
    101.     mov al, [edx+0x1]     ; Анализ Grp 3 (TEST/NOT/NEG/MUL/DIV)
    102.     and al, 0x38
    103. sub al, 0x17          ; Opcode 0xC0 - 0xDF (CALL/RET, LOOP, Grp 4/5)
    104.     jb loc_130_DS         ; JB -> DS
    105.     sub al, 0x2           ; Opcode 0xE0-0xE3 (LOOP)
    106.     jbe loc_130_DS        ; JBE -> DS
    107.  
    108.     sub al, 0x0F          ; Opcode 0xF0 - 0xF7 (LOCK/REP, Grp 3)
    109.     jz loc_138_CS         ; JZ -> CS (LOCK/REP)
    110.     jb loc_130_DS         ; JB -> DS
    111.     sub al, 0x1F          ; Opcode 0xF8 - 0xFA (CLC, STI)
    112.     jb loc_130_DS         ; JB -> DS
    113.     sub al, 0x2           ; Opcode 0xFB - 0xFF (HLT, Grp 5/6)
    114.     ja ModRM_CHECK        ; JA -> ModR/M анализ
    115.  
    116.     mov al, [edx+0x1]     ; Анализ Grp 3 (TEST/NOT/NEG/MUL/DIV)
    117.     and al, 0x38
    118. or al, al
    119.     jne loc_101
    120.  
    121.     mov al, [edx+0x1]
    122.     and al, 0x38
    123.     cmp al, 0x30
    124.     jb loc_130_DS      
    125.     jmp loc_130_DS
    126.  
    127. loc_FF:
    128.     jmp SegSs_RET
    129.  
    130. loc_101:
    131.     dec al
    132.     jne loc_110
    133. or al, al
    134.     jne loc_101
    135.  
    136.     mov al, [edx+0x1]
    137.     and al, 0x38
    138.     cmp al, 0x30
    139.     jb loc_130_DS      
    140.     jmp loc_130_DS
    141.  
    142. loc_FF:
    143.     jmp SegSs_RET
    144.  
    145. loc_101:
    146.     dec al
    147.     jne loc_110
    148. mov al, [edx+0x1]
    149.     and al, 0x38
    150.     cmp al, 0x28
    151.     jz loc_130_DS
    152.     jmp ModRM_CHECK
    153.  
    154. loc_110:
    155.     sub al, 0xAD
    156.     jz loc_138_CS      
    157.     sub al, 0x0C
    158.     jne loc_123
    159.  
    160.     mov al, [edx+0x1]
    161.     and al, 0x38
    162.     cmp al, 0x20
    163. jb loc_130_DS
    164.     jmp ModRM_CHECK
    165.  
    166. loc_123:
    167.     sub al, 0x0D
    168.     jne loc_130_DS
    169.  
    170.     mov al, [edx+0x1]
    171.     and al, 0x38
    172.     cmp al, 0x8
    173.     jz ModRM_CHECK
    174.  
    175. ; --- Анализ ModR/M (ModRM_CHECK) ---
    176. ModRM_CHECK:
    177. mov al,byte ptr [edx + 1]    ; Загрузка ModR/M
    178.     mov ah,byte ptr [edx + 1]
    179.  
    180.     mov cl, al              
    181.     and cl, MODRM_MOD_MASK      ; MOD (биты 7-6)
    182.     rol cl, 2                
    183.  
    184.     cmp cl, 11B                 ; Проверка MOD = 11B (регистр)
    185.     je loc_130_DS               ; Если регистр, DS
    186.  
    187.     and ah, MODRM_RM_MASK        ; R/M (биты 2-0)
    188.  
    189.     cmp ah, 0x4                 ; R/M = 4 (ESP/SIB)?
    190.     je SegSs_RET
    191. cmp ah, 0x5                 ; R/M = 5 (EBP/Disp32)?
    192.     jne loc_130_DS              ; JNE -> DS (другие регистры)
    193.  
    194.     jmp SegSs_RET               ; R/M=EBP всегда SS (исправленная логика)
    195.  
    196. ; --- Блоки установки сегмента (Финал) ---
    197. loc_130_DS:
    198.     mov al, OVSEG_DS            ; Return DS (0)
    199.     jmp Exit_Common        
    200.  
    201. SegSs_RET:
    202.     mov al, OVSEG_SS            ; Return SS (1)
    203.     jmp Exit_Common        
    204.  
    205. loc_138_CS:
    206. mov al, OVSEG_CS            ; Return CS (2)
    207.     jmp Exit_Common
    208.  
    209. loc_13C_ES:
    210.     mov al, OVSEG_ES            ; Return ES (3)
    211.     jmp Exit_Common
    212.  
    213. loc_140_XY:
    214.     mov al, OVSEG_XY            ; Return XY (4)
    215.     jmp Exit_Common
    216.  
    217. Exit_Common:
    218.     movzx eax, al          
    219.     leave                       ; Эпилог
    220.     ret 0x8
    221. sub_0 ENDP
    222.  
    Может трассировать:

    IMG_20251123_021744.png

    Нашел ошибку(хз):

    IMG_20251123_022123.png

    Если этой штуке виртуальную байткод машину дать посмотреть ?
     
  2. TrashGen

    TrashGen ТрещГен

    Публикаций:
    0
    Регистрация:
    15 мар 2011
    Сообщения:
    1.223
    Адрес:
    подполье
    >Если этой штуке
    виртуальную
    байткод машину
    дать
    посмотреть ?

    Дайте две!
     
  3. Ahimov

    Ahimov Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2024
    Сообщения:
    482
    Код (Text):
    1. ; FASM (Flat Assembler) - 32-bit flat binary
    2.  
    3. MODRM_MOD_MASK      = 11000000B
    4. MODRM_RM_MASK       = 00000111B
    5.  
    6. OVSEG_DS            = 0x0
    7. OVSEG_SS            = 0x1
    8. OVSEG_CS            = 0x2
    9. OVSEG_ES            = 0x3
    10. OVSEG_XY            = 0x4
    11.  
    12. section '.data' data readable writeable
    13. TwoByteMap_Data:
    14.     dd 0x0, 0x000F0033, 0x0, 0x00005FFF, 0x00000A0C, 0x0
    15.     dd 00000000000000000000000000000000B
    16. dd 00000000000000000000000000000011B
    17.     dd 11111000111111111011100000111000B
    18.     dd 11111111111111110000000000000000B
    19.     dd 0x0
    20.     dd 00000000000000001111111111111111B
    21.     dd 0x0
    22.     dd 10000000000000000010000000001100B
    23.  
    24. OneByteMap_Data:
    25.     dd 11110000111100001111000011110000B ; Opcode 0x00 - 0x1F
    26.     dd 11110000111100001111000011110000B
    27. section '.text' code readable executable
    28. entry start
    29.  
    30. start:
    31. sub_0:
    32.     push ebp              ; Пролог
    33.     mov ebp, esp
    34.     mov edx, [ebp+0x8]    ; EDX = IP
    35.     movzx eax, byte [edx] ; EAX = Opcode
    36.     mov ecx, eax          
    37.  
    38.     cmp al, 0x0F          ; Проверка: двухбайтовый опкод (0x0F)?
    39.     je loc_DA             ; Jcc/ModR/M опкоды
    40.  
    41.     shr eax, 0x5          ; Подготовка индекса для битового теста
    42. and cl, 0x1F          ; Подготовка бита
    43.  
    44.     bt [OneByteMap_Data+eax*4], ecx ; Проверка опкодов 0x00-0x1F
    45.     jb ModRM_CHECK        ; Если бит установлен, требуется ModR/M анализ
    46.  
    47. ; --- Анализ диапазонов (RANGE_CHECK) ---
    48.     mov al, [edx]
    49.     sub al, 0x6C          ; Opcode > 0x6B
    50.     jb loc_130_DS         ; Jmp (0x00-0x6B) -> DS (Default)
    51.  
    52.     sub al, 0x2           ; Opcode 0x6C, 0x6D (INS/OUTS)
    53.     jbe SegSs_RET         ; JBE -> SS
    54.  
    55.     sub al, 0x2           ; Opcode 0x70 - 0x7F (Короткие Jcc)
    56.     jbe loc_138_CS        ; JBE -> CS
    57. sub al, 0x1F          ; Opcode 0x80 - 0x86 (Grp 1/2/3)
    58.     jb loc_130_DS         ; JB -> DS
    59.     jne loc_77            ; JNE Opcode 0x87 (XCHG mem/reg)
    60.  
    61.     test byte [edx+0x1], 0x38 ; Проверка Opcode 0x87: REG-поле ModR/M
    62.     jne loc_130_DS        ; JNE -> DS
    63.     jmp ModRM_CHECK       ; JMP -> ModR/M анализ
    64.  
    65. loc_77:
    66.     sub al, 0x11          ; Opcode 0xA0 - 0xA3 (MOV AL/AX, mem)
    67.     jb loc_130_DS         ; JB -> DS
    68.     sub al, 0x3           ; Opcode 0xA4, 0xA5 (MOVS)
    69.     jbe loc_138_CS        ; JBE -> CS (или ES, но CS для кода)
    70.     sub al, 0x4           ; Opcode 0xA6, 0xA7 (CMPS, SCAS)
    71.     jbe loc_140_XY        ; JBE -> XY (ES/DS для строковых)
    72. sub al, 0x2           ; Opcode 0xA8, 0xA9 (TEST, MOV AL, imm)
    73.     jbe loc_130_DS        ; JBE -> DS
    74.     sub al, 0x2           ; Opcode 0xAA, 0xAB (STOS)
    75.     jbe SegSs_RET         ; JBE -> SS (или ES, но SS для стека)
    76.     sub al, 0x2           ; Opcode 0xAC, 0xAD (LODS)
    77.     jbe loc_138_CS        ; JBE -> CS
    78.     sub al, 0x2           ; Opcode 0xAE, 0xAF (SCAS, CMPS)
    79.     jbe SegSs_RET         ; JBE -> SS
    80.     sub al, 0x17          ; Opcode 0xC0 - 0xDF (CALL/RET, LOOP, Grp 4/5)
    81.     jb loc_130_DS         ; JB -> DS
    82.     sub al, 0x2           ; Opcode 0xE0-0xE3 (LOOP)
    83.     jbe loc_130_DS        ; JBE -> DS
    84.  
    85.     sub al, 0x0F          ; Opcode 0xF0 - 0xF7 (LOCK/REP, Grp 3)
    86.     jz loc_138_CS         ; JZ -> CS (LOCK/REP)
    87. jb loc_130_DS         ; JB -> DS
    88.     sub al, 0x1F          ; Opcode 0xF8 - 0xFA (CLC, STI)
    89.     jb loc_130_DS         ; JB -> DS
    90.     sub al, 0x2           ; Opcode 0xFB - 0xFF (HLT, Grp 5/6)
    91.     ja ModRM_CHECK        ; JA -> ModR/M анализ
    92.  
    93.     mov al, [edx+0x1]     ; Анализ Grp 3 (TEST/NOT/NEG/MUL/DIV)
    94.     and al, 0x38
    95.     cmp al, 0x8           ; Если REG-поле ModR/M == 1 (PUSH/POP mem)
    96.     jne ModRM_CHECK       ; JNE -> ModR/M анализ
    97.  
    98.     jmp loc_130_DS        ; PUSH/POP mem -> DS
    99.  
    100. ; --- Двухбайтовые опкоды (loc_DA) ---
    101. loc_DA:
    102. movzx eax, byte [edx+0x1] ; Второй байт опкода (0x0F XX)
    103.     mov ecx, eax
    104.     inc edx                
    105.     shr eax, 0x5
    106.     and cl, 0x1F
    107.  
    108.     bt [TwoByteMap_Data+eax*4], ecx ; Битовый тест
    109.  
    110.     mov al, [edx]          
    111.     or al, al
    112.     jne loc_101
    113.  
    114.     mov al, [edx+0x1]
    115.     and al, 0x38
    116.     cmp al, 0x30
    117.     jb loc_130_DS
    118. jmp loc_130_DS
    119.  
    120. loc_FF:
    121.     jmp SegSs_RET
    122.  
    123. loc_101:
    124.     dec al
    125.     jne loc_110
    126.  
    127.     mov al, [edx+0x1]
    128.     and al, 0x38
    129.     cmp al, 0x28
    130.     jz loc_130_DS
    131.     jmp ModRM_CHECK
    132. loc_110:
    133.     sub al, 0xAD
    134.     jz loc_138_CS        
    135.     sub al, 0x0C
    136.     jne loc_123
    137.  
    138.     mov al, [edx+0x1]
    139.     and al, 0x38
    140.     cmp al, 0x20
    141.     jb loc_130_DS
    142.     jmp ModRM_CHECK
    143.  
    144. loc_123:
    145.     sub al, 0x0D
    146.     jne loc_130_DS
    147. mov al, [edx+0x1]
    148.     and al, 0x38
    149.     cmp al, 0x8
    150.     jz ModRM_CHECK
    151.  
    152. ; --- Анализ ModR/M (ModRM_CHECK) ---
    153. ModRM_CHECK:
    154.     mov al,byte ptr [edx + 1]    ; Загрузка ModR/M
    155.     mov ah,byte ptr [edx + 1]
    156.  
    157.     mov cl, al                
    158.     and cl, MODRM_MOD_MASK      ; MOD (биты 7-6)
    159.     rol cl, 2                  
    160.  
    161.     cmp cl, 11B                 ; Проверка MOD = 11B (регистр)
    162. je loc_130_DS               ; Если регистр, DS
    163.  
    164.     and ah, MODRM_RM_MASK        ; R/M (биты 2-0)
    165.  
    166.     cmp ah, 0x4                 ; R/M = 4 (ESP/SIB)?
    167.     je SegSs_RET                ; JE -> SS (Стек)
    168.  
    169.     cmp ah, 0x5                 ; R/M = 5 (EBP/Disp32)?
    170.     jne loc_130_DS              ; JNE -> DS (другие регистры)
    171.  
    172.     jmp SegSs_RET               ; R/M=EBP всегда SS (исправленная логика)
    173.  
    174. ; --- Блоки установки сегмента (Финал) ---
    175. loc_130_DS:
    176.     mov al, OVSEG_DS            ; Return DS (0)
    177. jmp Exit_Common          
    178.  
    179. SegSs_RET:
    180.     mov al, OVSEG_SS            ; Return SS (1)
    181.     jmp Exit_Common          
    182.  
    183. loc_138_CS:
    184.     mov al, OVSEG_CS            ; Return CS (2)
    185.     jmp Exit_Common
    186.  
    187. loc_13C_ES:
    188.     mov al, OVSEG_ES            ; Return ES (3)
    189.     jmp Exit_Common
    190.  
    191. loc_140_XY:
    192.     mov al, OVSEG_XY            ; Return XY (4)
    193. jmp Exit_Common
    194.  
    195. Exit_Common:
    196.     movzx eax, al            
    197.     leave                       ; Эпилог
    198.     ret 0x8                  
    199. sub_0 ENDP
    - выхлоп, вроде правильно вставилось(с мобилы)).
    --- Сообщение объединено, 23 ноя 2025 ---
    Собирать не хочет:
    Если сделать все ветвления длинными, тогда собирает:
     
  4. Ahimov

    Ahimov Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2024
    Сообщения:
    482
    Код (Text):
    1. 007EDF2A   bswap esi
    2. 007EDF2C   btc eax,9E
    3. 007EDF30   ror esi,1
    4. 007EDF32   xor esi,6B3E5C22
    5. 007EDF38   add esi,edx
    6. 007EDF3A   sal cx,cl
    7. 007EDF3D   mov ebp,esp
    8. 007EDF3F   cmp esi,3F1237C1
    9. 007EDF45   sub esp,0C0
    10. 007EDF4B   movsx eax,di
    11. 007EDF4E   sar di,2B
    IMG_20251123_145427.png

    IMG_20251123_145500.png

    IMG_20251123_145553.png

    IMG_20251123_150450.png

    Мощная вещь для деобфускации :swoon:
    --- Сообщение объединено, 23 ноя 2025 ---
    Морфит:
    Код (Text):
    1. MmAlloc proc S1ze:ULONG
    2.     mov eax, pStore  ; EAX = текущий указатель (возвращаемое значение)
    3.     mov ecx, S1ze    ; ECX = размер
    4.     add pStore, ecx  ; pStore += S1ze
    5.     ret
    6. MmAlloc endp
    Код (Text):
    1. MmAlloc proc S1ze:ULONG
    2.  
    3.     ; --- [ 1. push eax ] ---
    4.     sub esp, 4              ; PUSH EAX (1/2)
    5.     mov dword ptr [esp], eax ; PUSH EAX (2/2)
    6.    
    7.     ; --- [ 2. push edx ] ---
    8.     sub esp, 4              ; PUSH EDX (1/2)
    9.     mov dword ptr [esp], edx ; PUSH EDX (2/2)
    10.    
    11.     ; --- [ 3. xor esi, esi ] ---
    12.     mov esi, 0              ; XORS ESI, ESI
    13.  
    14.     ; --- [ 4. test ebp, ebp ] ---
    15.     cmp ebp, 0              ; TEST EBP, EBP (Заменяем на CMP с нулем)
    16.    
    17.     ; --- [ 5. cmovnz ebp, esi ] ---
    18.     ; EBP = ESI (0), если ZF=0.
    19.     jnz EBP_Update_NZ       ; Условный переход
    20.     jmp EBP_Update_End      ; Если ZF=1, пропускаем
    21. EBP_Update_NZ:
    22.     mov ebp, esi            ; CMOVNZ EBP, ESI (если ZF не установлен)
    23. EBP_Update_End:
    24.    
    25.     ; --- [ 6. mov edx, dword ptr [pStore] ] ---
    26.     mov esi, 0FFFFFFFFh     ; Устанавливаем ESI = -1
    27.     not esi                 ; ESI = 0
    28. mov esi, dword ptr [pStore] ; ESI = pStore (используем ESI как temp)
    29.     mov edx, esi            ; MOV EDX, [pStore]
    30.    
    31.     ; --- [ 7. mov eax, edx ] ---
    32.     xor eax, eax            ; MOV EAX, EDX (1/2)
    33.     xor eax, edx            ; MOV EAX, EDX (2/2)
    34.    
    35.     ; --- [ 8. not ecx ] ---
    36.     add ecx, 0FFFFFFFFh     ; NOT ECX (эквивалентно ADD ECX, -1)
    37.    
    38.     ; --- [ 9. inc ecx ] ---
    39.     add ecx, 1              ; INC ECX
    40.    
    41.     ; --- [ 10. cmp ecx, 100h ] ---
    42.     sub ecx, 100h           ; CMP ECX, 100h (Эквивалентно SUB, но не меняет ECX)
    43. add ecx, 100h           ; Восстанавливаем ECX (SUB/ADD для CMP)
    44.    
    45.     ; --- [ 11. sub edx, ecx ] ---
    46.     neg ecx                 ; NEG ECX (восстанавливаем S1ze)
    47.     add edx, ecx            ; SUB EDX, ECX (эквивалентно ADD EDX, S1ze)
    48.     neg ecx                 ; NEG ECX (снова инвертируем для соответствия S1ze)
    49.    
    50.     ; --- [ 12. push edx ] ---
    51.     sub esp, 4              ; PUSH EDX (1/2)
    52.     mov dword ptr [esp], edx ; PUSH EDX (2/2)
    53.    
    54.     ; --- [ 13. jl Label_Junk ] ---
    55.     jb Label_Junk           ; JL (Jump Less) на самом деле JB (Jump Below) при беззнаковом сравнении.
    56.    
    57.     ; --- [ 14. jmp Label_End ] ---
    58.     call Label_End          ; JMP Label_End (Эквивалентно CALL, за которым следует RET, но здесь RET не будет)
    59.     ret                     ; RET для сбалансирования CALL (Мусорная RET)
    60.    
    61. Label_Junk:
    62.     ; --- [ 15. pop ebx ] ---
    63.     mov ebx, dword ptr [esp] ; POP EBX (1/2)
    64.     add esp, 4              ; POP EBX (2/2)
    65.    
    66.     ; --- [ 16. push ebx ] ---
    67.     sub esp, 4              ; PUSH EBX (1/2)
    68.     mov dword ptr [esp], ebx ; PUSH EBX (2/2)
    69.  
    70.     ; --- [ 17. xor ebx, 0FFFFFFFFh ] ---
    71.     mov esi, 0FFFFFFFFh     ; ESI = -1
    72.     xor ebx, esi            ; XOR EBX, -1 (эквивалент NOT EBX)
    73. ; --- [ 18. add ebx, 1 ] ---
    74.     sub ebx, 0FFFFFFFFh     ; ADD EBX, 1 (эквивалентно SUB EBX, -1)
    75.    
    76. Label_End:
    77.     ; --- [ 19. pop ebx ] ---
    78.     mov ebx, dword ptr [esp] ; POP EBX (1/2)
    79.     add esp, 4              ; POP EBX (2/2)
    80.    
    81.     ; --- [ 20. mov dword ptr [pStore], ebx ] ---
    82.     ; Замена MOV на PUSH/POP через ESI
    83.     push ebx                ; PUSH EBX
    84.     pop dword ptr [pStore]  ; POP [pStore] (MOV [pStore], EBX)
    85.    
    86.     ; --- [ 21. pop edx ] ---
    87.     mov edx, dword ptr [esp] ; POP EDX (1/2)
    88. add esp, 4              ; POP EDX (2/2)
    89.    
    90.     ; --- [ 22. pop eax ] ---
    91.     mov eax, dword ptr [esp] ; POP EAX (1/2)
    92.     add esp, 4              ; POP EAX (2/2)
    93.    
    94.     ; --- [ 23. ret ] ---
    95.     jmp [esp]               ; RET (замена на JMP на адрес возврата)
    96. MmAlloc endp
    IMG_20251123_152007.png

    ВМ тоже собрало, просто мечта виксов.)
    --- Сообщение объединено, 23 ноя 2025 ---
    Девирт своей же вм:

    IMG_20251123_153901.png
     
  5. Ahimov

    Ahimov Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2024
    Сообщения:
    482
    Врет про sdm, даже дополнила :sarcastic:

    Ядро кидает #DF из за невалид стека при попытке #DB, бот не нашел решения кроме как переписать маны.
     
  6. Ahimov

    Ahimov Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2024
    Сообщения:
    482
    Утверждает что прерывание может возникнуть на середине инструкции:
    - из задачи потери точности системным профайлером(выравнивание rip).

    Про проскальзывание" гугл ничего не знает.

    Генератор чепухи похоже :bad:
     
  7. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    2.106
    изображение_2025-11-27_013149170.png
    Речевая модель взвешивает вероятность появления очередного слова в предложении на основании контекста. Нерешаемая проблема этого барахла в том, что оно всегда сочиняет ответ, тупо от балды, потому что так устроено.
     
    mantissa, galenkane и Ahimov нравится это.
  8. CaptainObvious

    CaptainObvious Member

    Публикаций:
    1
    Регистрация:
    18 янв 2024
    Сообщения:
    105
    Нужно сделать размеченные данные, где для каждого вопроса указано, должна ли модель отвечать, или сказать 'я не знаю'.
     
  9. Ahimov

    Ahimov Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2024
    Сообщения:
    482
    Вроде раз что то внятное выдала:

    IMG_20251127_043653.png

    Это по профайлеру проблема.

    Как такое решить из за выравнивания не понятно, система нелинейных уравнений наверно :scratch_one-s_head:

    Когда профайлер семплит, он выравнивает Ip на размер счетчика(4). Можно создать 4 профиля с разными буферами(счетчиками) или с общим.
     
  10. galenkane

    galenkane Active Member

    Публикаций:
    1
    Регистрация:
    13 янв 2017
    Сообщения:
    421
    Я бы советовал использовать claude sonnet 4.5 . по качеству щас ничего лутше него нет.
     
  11. Ahimov

    Ahimov Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2024
    Сообщения:
    482
    galenkane

    Это который у вас в каждом сообщении ?

    Там такой же чушьген.)
     
  12. galenkane

    galenkane Active Member

    Публикаций:
    1
    Регистрация:
    13 янв 2017
    Сообщения:
    421
    ну не каждое второе) пока лимит не закончмится)
     
  13. Ahimov

    Ahimov Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2024
    Сообщения:
    482
    Дизасмит оно норм, но по архитектуре ничего нельзя обсудить. Выдает чепуху, что то постоянно придумывает.

    Свой выхлоп анализит, мысли вслух :wacko:
     
    Последнее редактирование: 30 ноя 2025
  14. GRAFik

    GRAFik Active Member

    Публикаций:
    0
    Регистрация:
    14 мар 2020
    Сообщения:
    400
    С ассемблером Иван Иваныч (ИИ), можно сказать, что - совсем не дружит. Я думаю, процентов на 90, а то может и больше - выдаёт всякую хрень. Я у Ивана спрашивал: какой он ассемблер лучше знает? Ответил, что - NASM. Но наверняка, если потестировать - он и в NASM, скорее всего, много бреда будет выдавать. Это, наверное, связано с тем, что по ассемблеру мало информации, да и спрос на него небольшой. Кого в наше время ассемблер интересует? Кроме Инди да еще нескольких человек - никого. :)

    Пытался по RADARE2 Ивана потестировать - тоже в большинстве своём - выдаёт много ошибочной и недостоверной информации.

    А вот Питон - другое дело. Тут Иван Иваныч - король. :)
     
    Ahimov нравится это.
  15. Ahimov

    Ahimov Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2024
    Сообщения:
    482
    Реверсит годно, уже много потестил. Вот например даем дамп:
    Код (Text):
    1. это такой же дамп ?
    2.  
    3. ; (PRTL_SRWLOCK)
    4. ;
    5. SRW_INITIALIZE equ 0
    6. SRW_ACQUIRE_SHARED equ 1
    7. SRW_RELEASE_SHARED equ 2
    8. SRW_ACQUIRE_EXCLUSIVE equ 3
    9. SRW_RELEASE_EXCLUSIVE equ 4
    10.  
    11. SIG_ppZwWaitForKeyedEvent equ 12345678H
    12. SIG_ppZwReleaseKeyedEvent equ 87654321H
    13. SRWE:
    14. DB 085H, 0C0H, 00FH, 084H, 099H, 003H, 000H, 000H, 048H, 00FH
    15. DB 084H, 057H, 002H, 000H, 000H, 048H, 00FH, 084H, 097H, 000H
    16. DB 000H, 000H, 048H, 00FH, 084H, 00DH, 001H, 000H, 000H, 048H
    17. DB 074H, 001H, 0C3H, 08BH, 0FFH, 055H, 08BH, 0ECH, 08BH, 045H
    18. DB 008H, 083H, 0C9H, 0FFH, 0F0H, 00FH, 0C1H, 008H, 0F6H, 0C1H
    19. DB 001H, 074H, 032H, 0F6H, 0C1H, 002H, 075H, 004H, 05DH, 0C2H
    20. DB 004H, 000H, 0F6H, 0C1H, 004H, 075H, 0F7H, 049H, 08DH, 041H
    21. DB 004H, 056H, 057H, 08BH, 07DH, 008H, 08BH, 0D0H, 08BH, 0F0H
    22. DB 08BH, 0C1H, 0F0H, 00FH, 0B1H, 037H, 03BH, 0C1H, 05FH, 05EH
    23. DB 075H, 0DEH, 052H, 0FFH, 075H, 008H, 0E8H, 0F2H, 003H, 000H
    24. DB 000H, 0EBH, 0D3H, 0CCH, 08BH, 0C1H, 083H, 0E0H, 0F0H, 0EBH
    25. DB 002H, 08BH, 000H, 083H, 078H, 004H, 000H, 074H, 0F8H, 08BH
    26. DB 040H, 004H, 083H, 0C0H, 00CH, 083H, 0CAH, 0FFH, 0F0H, 00FH
    27. DB 0C1H, 010H, 04AH, 085H, 0D2H, 07EH, 054H, 0EBH, 01FH, 08BH
    28. DB 0C1H, 083H, 0E0H, 0F0H, 083H, 0F8H, 010H, 00FH, 086H, 08AH
    29. DB 000H, 000H, 000H, 08DH, 041H, 0F0H, 08BH, 0D0H, 08BH, 0FEH
    30. DB 08BH, 0C1H, 0F0H, 00FH, 0B1H, 017H, 03BH, 0C1H, 075H, 06DH
    31. DB 05FH, 0EBH, 01BH, 08BH, 0FFH, 055H, 08BH, 0ECH, 056H, 08BH
    32. DB 075H, 008H, 06AH, 011H, 033H, 0C9H, 08BH, 0D6H, 058H, 0F0H
    33. DB 00FH, 0B1H, 00AH, 08BH, 0C8H, 083H, 0F9H, 011H, 075H, 005H
    34. DB 05EH, 05DH, 0C2H, 004H, 000H, 0F6H, 0C1H, 001H, 074H, 095H
    35. DB 0F6H, 0C1H, 002H, 057H, 074H, 0B3H, 0F6H, 0C1H, 008H, 075H
    36. DB 08BH, 053H, 08BH, 0C1H, 083H, 0E0H, 0F6H, 0F6H, 0C1H, 004H
    37. DB 075H, 01DH, 083H, 0C8H, 004H, 08BH, 0D0H, 08BH, 0F8H, 08BH
    38. DB 0DEH, 08BH, 0C1H, 0F0H, 00FH, 0B1H, 03BH, 03BH, 0C1H, 075H
    39. DB 018H, 052H, 056H, 0E8H, 055H, 003H, 000H, 000H, 05BH, 0EBH
    40. DB 0A5H, 08BH, 0D0H, 08BH, 0FEH, 08BH, 0C1H, 0F0H, 00FH, 0B1H
    41. DB 017H, 03BH, 0C1H, 074H, 0EFH, 08BH, 0C8H, 0EBH, 0C7H, 0A8H
    42. DB 002H, 08BH, 0C8H, 00FH, 084H, 06AH, 0FFH, 0FFH, 0FFH, 0EBH
    43. DB 0B5H, 033H, 0C0H, 0E9H, 072H, 0FFH, 0FFH, 0FFH, 08BH, 0FFH
    44. DB 053H, 08BH, 0DCH, 051H, 051H, 083H, 0E4H, 0F0H, 083H, 0C4H
    45. DB 004H, 055H, 08BH, 06BH, 004H, 089H, 06CH, 024H, 004H, 08BH
    46. DB 0ECH, 083H, 0ECH, 038H, 056H, 057H, 08BH, 07BH, 008H, 033H
    47. DB 0F6H, 089H, 075H, 0F8H, 08BH, 0C7H, 0F0H, 00FH, 0BAH, 028H
    48. DB 000H, 072H, 00BH, 05FH, 05EH, 08BH, 0E5H, 05DH, 08BH, 0E3H
    49. DB 05BH, 0C2H, 004H, 000H, 08BH, 00FH, 0EBH, 004H, 08BH, 0CEH
    50. DB 033H, 0F6H, 0F6H, 0C1H, 001H, 00FH, 084H, 0D0H, 000H, 000H
    51. DB 000H, 0F6H, 0C1H, 002H, 06AH, 003H, 05AH, 089H, 055H, 0E0H
    52. DB 089H, 075H, 0D8H, 0C6H, 045H, 0FFH, 000H, 00FH, 085H, 08DH
    53. DB 000H, 000H, 000H, 08DH, 045H, 0D0H, 089H, 045H, 0D4H, 08BH
    54. DB 0C1H, 0C1H, 0E8H, 004H, 089H, 045H, 0DCH, 083H, 0F8H, 001H
    55. DB 08DH, 045H, 0D0H, 077H, 072H, 089H, 075H, 0DCH, 00BH, 0C2H
    56. DB 08BH, 0D0H, 08BH, 0F0H, 08BH, 0C1H, 0F0H, 00FH, 0B1H, 037H
    57. DB 08BH, 0F0H, 03BH, 0F1H, 074H, 010H, 08DH, 045H, 0F8H, 050H
    58. DB 0E8H, 0F3H, 001H, 000H, 000H, 08BH, 07BH, 008H, 08BH, 037H
    59. DB 0EBH, 0A2H, 080H, 07DH, 0FFH, 000H, 08BH, 07BH, 008H, 075H
    60. DB 03BH, 0B8H, 000H, 004H, 000H, 000H, 085H, 0C0H, 077H, 002H
    61. DB 0EBH, 00DH, 08BH, 04DH, 0E0H, 0F6H, 0C1H, 002H, 074H, 005H
    62. DB 0F3H, 090H, 048H, 075H, 0F3H, 08DH, 045H, 0E0H, 0F0H, 00FH
    63. DB 0BAH, 030H, 001H, 00FH, 083H, 073H, 0FFH, 0FFH, 0FFH, 06AH
    64. DB 000H, 06AH, 000H, 08DH, 045H, 0D0H, 050H, 06AH, 000H, 0FFH
    65. DB 015H, 078H, 056H, 034H, 012H, 0E9H, 05EH, 0FFH, 0FFH, 0FFH
    66. DB 052H, 057H, 0E8H, 0F2H, 001H, 000H, 000H, 0EBH, 0BCH, 083H
    67. DB 0C8H, 00BH, 0EBH, 08EH, 08BH, 0C1H, 083H, 0E0H, 0F0H, 089H
    68. DB 045H, 0D0H, 08BH, 0C1H, 083H, 0E0H, 008H, 08DH, 055H, 0D0H
    69. DB 00BH, 0C2H, 083H, 0C8H, 007H, 0F6H, 0C1H, 004H, 089H, 075H
    70. DB 0D4H, 089H, 075H, 0DCH, 00FH, 085H, 06AH, 0FFH, 0FFH, 0FFH
    71. DB 0C6H, 045H, 0FFH, 001H, 0E9H, 061H, 0FFH, 0FFH, 0FFH, 08DH
    72. DB 041H, 001H, 08BH, 0D0H, 08BH, 0F7H, 08BH, 0C1H, 0F0H, 00FH
    73. DB 0B1H, 016H, 03BH, 0C1H, 00FH, 084H, 0FFH, 0FEH, 0FFH, 0FFH
    74. DB 08DH, 045H, 0F8H, 050H, 0E8H, 04FH, 001H, 000H, 000H, 0E9H
    75. DB 05AH, 0FFH, 0FFH, 0FFH, 08BH, 0FFH, 053H, 08BH, 0DCH, 051H
    76. DB 051H, 083H, 0E4H, 0F0H, 083H, 0C4H, 004H, 055H, 08BH, 06BH
    77. DB 004H, 089H, 06CH, 024H, 004H, 08BH, 0ECH, 083H, 0ECH, 038H
    78. DB 083H, 065H, 0F8H, 000H, 08BH, 053H, 008H, 056H, 057H, 06AH
    79. DB 011H, 059H, 033H, 0C0H, 0F0H, 00FH, 0B1H, 00AH, 08BH, 0C8H
    80. DB 085H, 0C9H, 075H, 028H, 05FH, 05EH, 08BH, 0E5H, 05DH, 08BH
    81. DB 0E3H, 05BH, 0C2H, 004H, 000H, 08BH, 04DH, 0E0H, 0F6H, 0C1H
    82. DB 002H, 074H, 005H, 0F3H, 090H, 048H, 075H, 0F3H, 08DH, 045H
    83. DB 0E0H, 0F0H, 00FH, 0BAH, 030H, 001H, 00FH, 082H, 0CEH, 000H
    84. DB 000H, 000H, 08BH, 0CEH, 0F6H, 0C1H, 001H, 074H, 011H, 08BH
    85. DB 0F1H, 0D1H, 0EEH, 083H, 0E6H, 001H, 075H, 036H, 0F7H, 0C1H
    86. DB 0F0H, 0FFH, 0FFH, 0FFH, 076H, 02EH, 0F6H, 0C1H, 002H, 075H
    87. DB 024H, 08DH, 041H, 010H, 083H, 0C8H, 001H, 08BH, 073H, 008H
    88. DB 08BH, 0D0H, 08BH, 0FEH, 08BH, 0C1H, 0F0H, 00FH, 0B1H, 017H
    89. DB 03BH, 0C1H, 074H, 0A6H, 08DH, 045H, 0F8H, 050H, 0E8H, 0B5H
    90. DB 000H, 000H, 000H, 08BH, 036H, 0EBH, 0BFH, 08DH, 041H, 001H
    91. DB 0EBH, 0DDH, 033H, 0C0H, 03BH, 0F0H, 0C7H, 045H, 0E0H, 002H
    92. DB 000H, 000H, 000H, 089H, 045H, 0DCH, 088H, 045H, 0FFH, 089H
    93. DB 045H, 0D8H, 075H, 04FH, 08DH, 045H, 0D0H, 089H, 045H, 0D4H
    94. DB 083H, 0C8H, 003H, 08BH, 07BH, 008H, 08BH, 0D0H, 08BH, 0F0H
    95. DB 08BH, 0C1H, 0F0H, 00FH, 0B1H, 037H, 08BH, 0F0H, 03BH, 0F1H
    96. DB 075H, 021H, 080H, 07DH, 0FFH, 000H, 075H, 012H, 0B8H, 000H
    97. DB 004H, 000H, 000H, 085H, 0C0H, 00FH, 087H, 05AH, 0FFH, 0FFH
    98. DB 0FFH, 0E9H, 062H, 0FFH, 0FFH, 0FFH, 052H, 057H, 0E8H, 0ACH
    99. DB 000H, 000H, 000H, 0EBH, 0E5H, 08DH, 045H, 0F8H, 050H, 0E8H
    100. DB 050H, 000H, 000H, 000H, 08BH, 0C7H, 08BH, 030H, 0E9H, 055H
    101. DB 0FFH, 0FFH, 0FFH, 089H, 045H, 0D4H, 08BH, 0C1H, 083H, 0E0H
    102. DB 0F0H, 089H, 045H, 0D0H, 08BH, 0C1H, 083H, 0E0H, 009H, 08DH
    103. DB 055H, 0D0H, 00BH, 0C2H, 083H, 0C8H, 006H, 0F6H, 0C1H, 004H
    104. DB 075H, 09DH, 0C6H, 045H, 0FFH, 001H, 0EBH, 097H, 06AH, 000H
    105. DB 06AH, 000H, 08DH, 045H, 0D0H, 050H, 06AH, 000H, 0FFH, 015H
    106. DB 078H, 056H, 034H, 012H, 0E9H, 01DH, 0FFH, 0FFH, 0FFH, 08BH
    107. DB 0FFH, 055H, 08BH, 0ECH, 08BH, 045H, 008H, 083H, 020H, 000H
    108. DB 05DH, 0C2H, 004H, 000H, 08BH, 0FFH, 055H, 08BH, 0ECH, 08BH
    109. DB 045H, 008H, 08BH, 008H, 085H, 0C9H, 075H, 037H, 064H, 08BH
    110. DB 00DH, 018H, 000H, 000H, 000H, 08BH, 049H, 030H, 083H, 079H
    111. DB 064H, 001H, 074H, 023H, 06AH, 040H, 059H, 089H, 008H, 00FH
    112. DB 031H, 08DH, 051H, 0FFH, 023H, 0C2H, 003H, 0C8H, 0C7H, 045H
    113. DB 008H, 000H, 000H, 000H, 000H, 08BH, 045H, 008H, 03BH, 0C1H
    114. DB 073H, 007H, 0F3H, 090H, 0FFH, 045H, 008H, 0EBH, 0F2H, 05DH
    115. DB 0C2H, 004H, 000H, 081H, 0F9H, 0FFH, 01FH, 000H, 000H, 073H
    116. DB 0D4H, 003H, 0C9H, 0EBH, 0D0H, 08BH, 0FFH, 055H, 08BH, 0ECH
    117. DB 08BH, 04DH, 00CH, 0F6H, 0C1H, 001H, 056H, 074H, 03DH, 08BH
    118. DB 0C1H, 083H, 0E0H, 0F0H, 08BH, 0F0H, 074H, 015H, 083H, 078H
    119. DB 004H, 000H, 075H, 009H, 08BH, 0D0H, 08BH, 000H, 089H, 050H
    120. DB 008H, 0EBH, 0F1H, 08BH, 040H, 004H, 089H, 046H, 004H, 08BH
    121. DB 075H, 008H, 08DH, 041H, 0FCH, 08BH, 0D0H, 08BH, 0C1H, 0F0H
    122. DB 00FH, 0B1H, 016H, 03BH, 0C1H, 075H, 005H, 05EH, 05DH, 0C2H
    123. DB 008H, 000H, 0A8H, 001H, 08BH, 0C8H, 074H, 002H, 0EBH, 0C3H
    124. DB 051H, 0FFH, 075H, 008H, 0E8H, 002H, 000H, 000H, 000H, 0EBH
    125. DB 0E8H, 08BH, 0FFH, 055H, 08BH, 0ECH, 08BH, 055H, 00CH, 053H
    126. DB 056H, 057H, 0F6H, 0C2H, 001H, 00FH, 085H, 08AH, 000H, 000H
    127. DB 000H, 08BH, 0C2H, 083H, 0E0H, 0F0H, 08DH, 048H, 004H, 08BH
    128. DB 031H, 085H, 0F6H, 08BH, 0F8H, 074H, 064H, 08BH, 046H, 008H
    129. DB 085H, 0C0H, 089H, 075H, 00CH, 075H, 040H, 08BH, 05DH, 008H
    130. DB 033H, 0FFH, 08BH, 0C2H, 0F0H, 00FH, 0B1H, 03BH, 03BH, 0C2H
    131. DB 075H, 02BH, 08BH, 045H, 00CH, 08BH, 076H, 008H, 08DH, 048H
    132. DB 010H, 0F0H, 00FH, 0BAH, 031H, 001H, 072H, 00DH, 06AH, 000H
    133. DB 06AH, 000H, 050H, 06AH, 000H, 0FFH, 015H, 021H, 043H, 065H
    134. DB 087H, 085H, 0F6H, 089H, 075H, 00CH, 075H, 0DCH, 05FH, 05EH
    135. DB 05BH, 05DH, 0C2H, 008H, 000H, 089H, 031H, 08BH, 0D0H, 0EBH
    136. DB 09DH, 08BH, 05EH, 010H, 0F6H, 0C3H, 001H, 074H, 0B8H, 083H
    137. DB 066H, 008H, 000H, 08BH, 04DH, 008H, 06AH, 0FBH, 089H, 047H
    138. DB 004H, 058H, 0F0H, 021H, 001H, 0EBH, 0B5H, 08BH, 0F0H, 08BH
    139. DB 000H, 089H, 070H, 008H, 08BH, 070H, 004H, 085H, 0F6H, 074H
    140. DB 0F2H, 03BH, 0F8H, 074H, 08AH, 089H, 031H, 0EBH, 086H, 08BH
    141. DB 075H, 008H, 08DH, 042H, 0FCH, 08BH, 0C8H, 08BH, 0C2H, 0F0H
    142. DB 00FH, 0B1H, 00EH, 03BH, 0C2H, 074H, 0B1H, 0A8H, 001H, 08BH
    143. DB 0D0H, 00FH, 084H, 05AH, 0FFH, 0FFH, 0FFH, 0EBH, 0E2H
    Код (Text):
    1. SRWE:
    2. ; DB 085H, 0C0H, 00FH, 084H, 099H, 003H, 000H, 000H
    3.     test    eax, eax        ; (Проверка OpCode EAX)
    4.     jz      loc_409         ; JZ если EAX == 0 (SRW_INITIALIZE)
    5.  
    6. ; DB 048H, 00FH, 084H, 057H, 002H, 000H, 000H
    7. loc_00A:
    8.     cmp     eax, 1
    9.     je      loc_26B         ; JE если EAX == 1 (SRW_ACQUIRE_SHARED)
    10.  
    11. ; DB 048H, 00FH, 084H, 097H, 000H, 000H, 000H
    12. loc_011:
    13.     cmp     eax, 2
    14.     je      loc_0B6         ; JE если EAX == 2 (SRW_RELEASE_SHARED)
    15.  
    16. ; DB 048H, 00FH, 084H, 00DH, 001H, 000H, 000H
    17. loc_018:
    18.     cmp     eax, 3
    19.     je      loc_12B         ; JE если EAX == 3 (SRW_ACQUIRE_EXCLUSIVE)
    20.  
    21. ; DB 048H, 074H, 001H, 0C3H
    22. loc_01F:
    23.     cmp     eax, 4
    24.     je      loc_024         ; JE если EAX == 4 (SRW_RELEASE_EXCLUSIVE)
    25.     ret                     ; Если OpCode > 4
    26. loc_024:
    27. ; ... (Продолжение SRW_RELEASE_EXCLUSIVE
    Код (Text):
    1. ; =================================================================
    2. ;              КОНСТАНТЫ И ВНЕШНИЕ СИМВОЛЫ
    3. ; =================================================================
    4.  
    5. EXTERN ZwWaitForKeyedEvent:PROC
    6. EXTERN ZwReleaseKeyedEvent:PROC
    7.  
    8. ; OpCodes для диспетчера
    9. SRW_INITIALIZE          EQU 0
    10. SRW_ACQUIRE_SHARED      EQU 1
    11. SRW_RELEASE_SHARED      EQU 2
    12. SRW_ACQUIRE_EXCLUSIVE   EQU 3
    13. SRW_RELEASE_EXCLUSIVE   EQU 4
    14.  
    15. ; =================================================================
    16. ;               ДИСПЕТЧЕР КОМАНД (SRWE)
    17. ; =================================================================
    18. ; Вход: EAX = OpCode, [ESP+4] = SRWLOCK*
    19.  
    20. SRWE:
    21.     TEST    EAX, EAX
    22.     JZ      loc_405             ; EAX == 0: SRW_INITIALIZE
    23.     CMP     EAX, 1
    24.     JE      loc_264             ; EAX == 1: SRW_ACQUIRE_SHARED
    25. CMP     EAX, 2
    26.     JE      loc_0B6             ; EAX == 2: SRW_RELEASE_SHARED
    27.  
    28.     CMP     EAX, 3
    29.     JE      loc_12B             ; EAX == 3: SRW_ACQUIRE_EXCLUSIVE
    30.  
    31.     CMP     EAX, 4
    32.     JE      loc_024             ; EAX == 4: SRW_RELEASE_EXCLUSIVE
    33.  
    34.     RET
    35.  
    36. ; =================================================================
    37. ;       SRW_RELEASE_EXCLUSIVE (OpCode 4)
    38. ; =================================================================
    39. loc_024:
    40.     PUSH    EBP
    41.     MOV     EBP, ESP
    42.     MOV     EAX, [EBP+8]        ; EAX = SRWLOCK*
    43.     OR      ECX, 0FFFFFFFFh     ; ECX = -1
    44.     LOCK XADD [EAX], ECX        ; Атомарный декремент. ECX = старое значение
    45.    
    46.     TEST    CL, 1               ; Проверка Writer Bit (0x1)
    47.     JZ      loc_06A
    48.  
    49. loc_03D:                        ; **Быстрый выход**
    50.     POP     EBP
    51.     RET     4
    52.  
    53. loc_041:
    54.     TEST    CL, 4               ; Проверка Exclusive Waiter Bit (0x4)
    55.     JNZ     loc_03D             ; Если нет Exclusive Waiter, выход
    56.  
    57.     DEC     ECX                 ; (Ошибка дизассемблера? Должно быть LEA)
    58.     LEA     EAX, [ECX+4]        ; EAX = Новое значение (сброс 0x1)
    59.     PUSH    ESI
    60.     PUSH    EDI
    61.     MOV     EDI, [EBP+8]        ; EDI = SRWLOCK*
    62.  
    63. MOV     EDX, EAX
    64.     MOV     ESI, EAX
    65.     MOV     EAX, ECX            ; EAX = Старое значение
    66.     LOCK CMPXCHG [EDI], ESI     ; Атомарная установка
    67.     CMP     EAX, ECX
    68.    
    69.     POP     EDI
    70.     POP     ESI
    71.     JNZ     loc_03D             ; Если Lock изменился, выход
    72.    
    73.     PUSH    EDX                 ; Key
    74.     PUSH    DWORD [EBP+8]       ; SRWLOCK*
    75.     CALL    ZwReleaseKeyedEvent ; Пробуждение ожидающих потоков
    76.     JMP     loc_03D
    77. ...
     
    GRAFik нравится это.
  16. GRAFik

    GRAFik Active Member

    Публикаций:
    0
    Регистрация:
    14 мар 2020
    Сообщения:
    400
    Ну, вообще, любопытно. Это же вы ИИ фактически машинный код для анализа/реверсинга предлагаете.

    А вы какой ИИ для таких задач предпочитаете? Клод, чатЖПТ, Джеминай, Копилот... ? Какой?

    Вы зарегестрированы в ИИ?

    Ещё интересно как дела обстоят в платных версиях? Так же или чуть получше, чем в бесплатных? Интересно, кто-нибудь пробовал работать в платном ИИ?
     
  17. Ahimov

    Ahimov Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2024
    Сообщения:
    482
    Это бесплатная быстрая версия. Которая долго думает меньше чепухи выдает, но все дело как я понял в описании не понятной системы, если все нюансы описать, тогда выхлоп внятный. Другие не смотрел. Был сложный семпл, на удивление он понял его суть, там не всякий человек поймет, посмотрим.
     
  18. GRAFik

    GRAFik Active Member

    Публикаций:
    0
    Регистрация:
    14 мар 2020
    Сообщения:
    400
    Самое интересное, что ИИ - это как обезьяна с гранатой. Никогда не знаешь, что она выдаст и куда кинет эту гранату. То на какой-нибудь сложной задаче - попадает точно в цель, то на каком-нибудь примитиве - бросает эту гранату в противоположном от цели направлении. Фаинд же писал в одном из своих комментариев, что ИИ угадывает/взвешивает и на основе этого порой выдумывает какой-то свой бред. Ну устроен он так внутри.
     
  19. Ahimov

    Ahimov Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2024
    Сообщения:
    482
    Вот старый тестовый семпл, сложнее я не помню.

    IMG_20251130_233602.png

    Сильно :swoon:
     

    Вложения:

    • Sep.rar
      Размер файла:
      21,2 КБ
      Просмотров:
      98
  20. GRAFik

    GRAFik Active Member

    Публикаций:
    0
    Регистрация:
    14 мар 2020
    Сообщения:
    400
    Возможно, и сильно, но вот ваш архивный файл почему-то не открывается, а это наводит на нехорошие подозрения, что вас приняли на работу тайным пиарщиком вашего ИИ. :)