عضویت العربیة English
پیامبر اکرم صلّی الله علیه و آله: هر که حسین را دوست بدارد، خداوند دوستدار او است. بحارالأنوار، ج43، ص261

چگونه از مشاهده شدن “مسیر کامپایل پروژه” توسط دیگران جلوگیری کنیم ؟

چگونه از مشاهده شدن “مسیر کامپایل پروژه” توسط دیگران جلوگیری کنیم ؟
دوشنبه 20 تیر 1390  07:41 ب.ظ

چگونه از مشاهده شدن “مسیر کامپایل پروژه” توسط دیگران جلوگیری کنیم ؟

 

زمانی که فایل اجرایی پروژه های نوشته شده به زبان ویژوال بیسیک را با ابزارهای ویرایش متن ساده ای مانند NotePad باز کنید ، شاهد اطلاعات جالبی در این مورد خواهید بود . مواردی مانند : نام فرم ها ،کنترل های مورد استفاده ، نام پروژه ، مسیر کامپایل پروژه بر روی رایانه برنامه نویس ، توابع API استفاده شده در برنامه و … همگی در صورتی که فایل اجرایی Pack نشده باشد قابل روئیت هستند . شاید در نگاه اول این موضوع زیاد مهم جلوه نکند ولی با نگاهی عمیق تر متوجه می شوید که چه اطلاعات مهمی را در اختیار سوء استفاده کنندگان قرار داده اید. برای مثال مسیری که پروژه شما از آن کامپایل و به فایل اجرایی تبدیل شده است می تواند یکی از گزینه های مورد علاقه افرادی باشد که حداقل برای مخشوش کردن افکار شما و یا در موارد جدی تر به سرقت بردن سورس کد نرم افزار از آن سوء استفاده کنند .

 

یکی از روش ها جلوگیری از مشاهده شدن “مسیر کامپایل پروژه” توسط دیگران ، ایجاد تغییرات دستی کوچکی در فایل اجرایی است . برای اینکار از یک دستکاری کننده رشته های فایل اجرایی بهره میگیرم . یکی از نکات قابل توجه در تغییر رشته مورد نظرمان، حدف کاراکتر اسکی صفر است . زیرا در رشته مورد نظر، برای جداسازی کاراکترها ازکاراکتر اسکی صفر استفاده شده است  . این کاراکتر در رده کاراکترهای مجاز رشته ای محسوب نمی شود . از این رو در حالت عادی جستجوی برای یافتن رشته مورد نظرمان بی نتیجه خواهد ماند. برای رفع این مشکل ، با استفاده از زبان C#.net دست به کار شده و یک Replace کننده متن ساده تولید می کنیم . خوشبختانه شی Convert این امکان را به ما می دهد تا اسکی(۰) را به رشته تبدیل کنیم .طبق مطالب گفته شده در ابتدا می بایست رشته مورد نظر(مسیر کامپایل پروژه) را با کاراکتر اسکی ۰ ادغام کرده و سپس رشته جدید بدست آمده را در فایل اجرایی جستجو کنیم . با این کار محدودیت در شناسایی کاراکتر اسکی صفر را از بین برده و نهایتاً برای مخفی کردن مسیر کامپایل پروژه ، رشته هایی بی هدف  (ترجیحاً زنجیری از کاراکتر اسکی صفر) را جایگزین رشته جاری می کنیم .

کد زیر گویای موارد گفته شده است :

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

using System.IO;

//Programmer : M8SPY
//Website : http://m8spy.com

namespace WindowsFormsApplication1
{
 public partial class Form1 : Form
 {
 public Form1()
 {
 InitializeComponent();
 }

 string OutPut;
 string StrAl;
 string StrWithAsc0;
 string x1,x2,y1;
 private void button1_Click(object sender, EventArgs e)
 {

 //Edgham Kardane Masir Morede nazar ba Asc(0)
 for (int i = 0; i < (int)textBox3.Text.Length; i++)
 {
 x1 = textBox3.Text.Substring(i, 1);
 x2 = x2 + x1 + Convert.ToChar(0).ToString();
 }

 //Be Dalile Inke Dar REshte Morede Nazar Maa , Yeki Dar Mian Az
 //Asc(0) Estefade shode , Nahatayan Toole Reshte 2 Barabar Khahad shod.
 int jx = (int)textBox3.Text.Length * 2;
 for (int i = 0; i < jx; i++)
 {
 y1 = y1 + Convert.ToChar(0).ToString();
 }

 //Call
 ModifyExe(textBox2.Text, x2, y1 , textBox2.Text);

 }

 private void Form1_Load(object sender, EventArgs e)
 {

 }

 public void ModifyExe(string FileAddress, string Find, string Replace,string NewFileAddress)
 {
 int FLen = Find.Length;
 int RLen = Replace.Length;
 StrAl = "";

 //Read Exe File
 FileStream FOp= new FileStream(FileAddress, FileMode.Open);
 byte[] OpenByte = new byte[FOp.Length];
 byte[] CloseByte=new byte[FOp.Length + (RLen-FLen)];

 FOp.Read(OpenByte,0,(int)FOp.Length);

 for (int j = 0; j < OpenByte.Length; j++)
 {
 StrAl = StrAl + " " + OpenByte[j].ToString();
 }

 //Replace the New Value
 StrAl = StrAl.Replace(StrToAsc(Find).Trim(), StrToAsc(Replace).Trim()).Trim();

 FOp.Close();

 //--------------------------------------------------------------------------------------/

 //Wrtite File
 string[] Strs = StrAl.Split(new char[] { ' ' });
 byte[] wr = new byte[Strs.Length];

 for (int i = 0; i < Strs.Length; i++)
 {
 wr[i] = Convert.ToByte(Strs[i]);
 }

 FileStream FW = new FileStream(NewFileAddress, FileMode.Create);
 FW.Write(wr, 0, (int)wr.Length);
 FW.Close();
 }

 public string StrToAsc(string Input)
 {
 char[] C = new char[Input.Length];
 int[] A = new int[Input.Length];
 OutPut = "";

 for (int i = 0; i < Input.Length; i++)
 {
 C[i] = Convert.ToChar(Input.Substring(i, 1));
 A[i] = Convert.ToInt32(C[i]);
 OutPut = OutPut + " " + A[i].ToString();
 }

 return OutPut;
 }

 }
}

-

نکته مهم در تغییر محتویات رشته ای یک فایل اجرایی رعایت نمودن تعداد کاراکترهای قبل و پس از انجام تغییرات است . به عبارت ساده تر ، می بایست طول رشته ای که قرار است به جای رشته فعلی مان( یعنی مسیر کامپایل پروژه) جایگزین شود ، از قبل مشخص شده باشد . همانطور که گفته شد در بین کاراکترهای رشته مورد نظر ما از کاراکتر اسکی صفر استفاده شده است پس ضمن توجه به اهمیت برابر بودن طول رشته های قبل و بعد از عملیات جایگزینی ، می توان نتیجه گرفت که نهایتاً طول رشته جایگزین شونده، ۲ برابر طول واقعی مسیری است که ما از آن مطلع هستیم . به عبارت ساده تر، رشته ی جدیدی ایجاد می کنیم که طول آن ۲ برابر طول کاراکترهای واقعی موجود باشد .در نهایت پس از انجام عملیات جایگزینی کارمان با موفقیت انجام شده و از مشاهده شدن مسیر کامپایل پروژه مان توسط دیگران جلوگیری کرده ایم .

قطعاً اگر اسکی صفر مزاحم کارمان نمی شد با استفاده از برنامه های آماده ای همچون hiew ، در مدت زمان کمتری به نتیجه دلخواه دست پیدا می کردیم.

***به بهشت نمی روم اگر مــــــادرم آنجا نباشد***

آنگاه که تنها شدی و در جست جوی یک تکیه گاه مطمئن هستی ، بر من توکل نما . نمل/79

 

mehdigerdali

mehdigerdali
کاربر طلایی1
تاریخ عضویت : خرداد 1390 
تعداد پست ها : 5587
محل سکونت : خوزستان
دسترسی سریع به انجمن ها