I am trying to reverse a virtualized program (using VMProtect 3.4.x). I decided to hook certain functions of the program such as the winsocks library send() and recv().
This is how it looks like:
[monitor] send() buf: ╣▒√≈o└┼└1£ len: 12 flags: 0
[monitor] recv() buf: ╣▒√≈o└═└1£ len: 12 flags: 0
[monitor] recv() buf: ï|W,7¼≤╛ len: 8 flags: 0
[monitor] send() buf: √X╥(£!◄▀√εPî'Zë¬08ꣽ╘╤µ0ߺÉ╥╬=S3τU_╜µⁿºi┼²f░uw╦╖TX▓°┼ùΘ¿╡ len: 58 flags: 0
[monitor] recv() buf: √X╥(₧!◄▀╘εPî len: 12 flags: 0
[monitor] recv() buf: % len: 1 flags: 0
[monitor] send() buf: √X╥(Æ!◄▀òεPîT♂╥πc_╨ÿ╒╜ùΓzï╟ÿ▐Ω§Sc┘9~ïσµ┤P╟σRà⌂X╚éT2╪²µ╛Γ╓π≡3r~╗l╘O╓▀]PÖån╟ǽ len: 76 flags: 0
[monitor] recv() buf: √X╥(₧!◄▀╘εPî len: 12 flags: 0
[monitor] recv() buf: % len: 1 flags: 0
Another run:
[monitor] send() buf: ╣▒√≈o└┼└1£ len: 12 flags: 0
[monitor] recv() buf: ╣▒√≈o└═└1£ len: 12 flags: 0
[monitor] recv() buf: ïxS*4¬≤╗ len: 8 flags: 0
[monitor] send() buf: F►²cgTα2╬|4÷«ÄY░Θs*Bít╡Yl⌠rp↑↑─╨¶WD┬☼«U;÷ƒçz▼╣┐┌n╘Γ│óHUU len: 58 flags: 0
[monitor] recv() buf: F►²ceTα2ß|4÷ len: 12 flags: 0
[monitor] recv() buf: ¼ len: 1 flags: 0
[monitor] send() buf: F►²ciTα2á|4÷▌▀☻∙║¶rF▀↔≤]&₧↕x¶<∞╨Di(π9¡O(╧¥ƒN2§û╝∩n╛ê╢$ïC+♥σ╠n▄E÷sÿ↑¬╗z°☻═a] len: 76 flags: 0
[monitor] recv() buf: F►²ceTα2ß|4÷ len: 12 flags: 0
[monitor] recv() buf: ¼ len: 1 flags: 0
I would like to know what is being send and received. I don't know how the final buffer will look like. Given the fact that there are some repeating symbols I don't think any complex algorithm is used.
Is there any (somewhat) easy way to figure it out or do I have to go though the virtualized code?