2012-05-10 17 views
8

में बनाएँRemoteThread मैं विंडोज में CreateRemoteThread का उपयोग कर रहा हूं और जानना चाहता हूं कि लिनक्स में वही बात संभव है या नहीं। क्या लिनक्स में ऐसा करना संभव है?लिनक्स

+0

यह एक सी ++ सवाल कैसा है? –

+0

CreateRemoteThread एक WINAPI है जिसका उपयोग C++ कोड में किया गया है। – CrazyC

उत्तर

-2

`# शामिल pthread.h

पूर्णांक pthread_create (pthread_t * धागा, स्थिरांक pthread_attr_t * attr, शून्य * (* start_routine) (शून्य *), शून्य * आर्ग);` संकलित करें और लिंक के साथ - pthread।

विस्तार के लिए आदमी pthread_create देख

+2

इस तरह एक धागा बनाने के लिए, धागा नहीं बनाते हैं और इसे दूरस्थ प्रक्रिया में इंजेक्ट करते हैं। –

6

लिनक्स पर ऐसा करने का पारंपरिक तरीका अलग से एक गतिशील पुस्तकालय (.so) उस में अपने कोड के साथ बनाने के लिए है, तो चल आवेदन में अपने पुस्तकालय की लोडिंग के लिए मजबूर हो जाएगा । विंडोज़ पर CreateRemoteThread के साथ कोई भी स्टॉप शॉप नहीं है।

तो यहाँ बुनियादी कदम हैं:

  1. एक dylib बनाएं/ताकि कोड आप दूरस्थ प्रक्रिया में निष्पादित करने के लिए इच्छा होती है।
  2. असेंबली में कुछ बहुत ही सरल कोड लिखें जो निर्दिष्ट फ़ाइल को लोड करता है (मुख्य रूप से this link, भाग 1 से कॉपी और पेस्ट करें)।
  3. एम्बेड करें लोडर एएसएम को दूसरी कोड फ़ाइल/ऐप में एक बफर में बाइनरी पेलोड के रूप में कहा गया है। चरण 2 में लिखे गए बाइनरी पेलोड को चलाने के लिए आप ptrace का उपयोग करेंगे, जो चरण 1 में बनाए गए .so पर _dl_open() पर कॉल करने के लिए लक्षित ऐप को ट्रिगर करेगा, जिसमें वास्तविक कोड शामिल है जिसे आप चलाने के लिए चाहते हैं। (the same link में दिए गए नमूना, भाग 2.)

आप मुख्य पंप से एक अलग थ्रेड में चलाने के लिए अपने कोड की जरूरत है, तो आप pthread_create कोड में कदम में उपयोग करना चाहिए 1.

इस आशा अपने प्रश्न का उत्तर दें। हां, यह विंडोज़ की तुलना में अधिक जुड़ा हुआ है; लेकिन यह समान रूप से अच्छी तरह से काम करना चाहिए। इसके अलावा, आप भावी रिमोट कोड इंजेक्शन परियोजनाओं के लिए चरण 2 और 3 से पूरे कोड का पुन: उपयोग कर सकते हैं।