PDA

View Full Version : چطور میشه یه dll ساخت؟



mojdeh6583
پنج شنبه 21 مرداد 1389, 11:52 صبح
سلام
اگه کسی مطلبی پیرامون اینکه چطور یه dll رو میشه ساخت داره عنوان کنه.
و اینکه اگر بخشی از کدمون رو تبدیل بهdll کنیم آیا باعث امنیتش میشه یا نه؟
از همه دوستانی که در این زمینه کمک کنند متنشکرم

mahdi_7610
پنج شنبه 21 مرداد 1389, 12:27 عصر
سلام
اگه کسی مطلبی پیرامون اینکه چطور یه dll رو میشه ساخت داره عنوان کنه.
و اینکه اگر بخشی از کدمون رو تبدیل بهdll کنیم آیا باعث امنیتش میشه یا نه؟
از همه دوستانی که در این زمینه کمک کنند متنشکرم
سلام

یه اموزش در حد مبتدی واستون گذاشتم تا با روال کار اشنا بشید .

موفق باشید

محسن شامحمدی
پنج شنبه 21 مرداد 1389, 12:35 عصر
dll ها هم دقیقا مثل فایل های اجرای اند (از لحاظ امنیت)

mojdeh6583
پنج شنبه 21 مرداد 1389, 12:52 عصر
dll ها هم دقیقا مثل فایل های اجرای اند (از لحاظ امنیت)

پس چرا میگن قسمت هایی از برنامه که از لحاظ امنیت برنامه رو چک می کنند رو توی یه سری ماژولها یا dll ها قرار بدید تا یه مرحله کشفشون سخت تر شه؟

omidrayaneh.68
پنج شنبه 21 مرداد 1389, 18:18 عصر
سلام خسته نباشید مرسی از سوالتون من این Dll را درون پروژه املاکیم گذاشته بودم ببخشید دیر شد تا جوابتون را بدم آخه برا کنکور کاردانی به کارشناسی داشتم خودما خفه می کردم آخرشم که خیلی سخت بود

من یک سری کد که تو C# نوشتم در قسمت لاگین برنامم براتون میزارم دیگه خودتون باید با توجه به نوع برنامتون کد ها را اضافه کنید این کدا میان به محض درست بودن کد یک فایل کنار EXE شما میسازه و پروژه را فعال میکنه راستی خود فایل dll هم را براتون آپلود کردم لینکش پایین هست



using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Text.RegularExpressions;
using System.IO;
using System.Globalization;
using _UseFull;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
using System.Collections;
using FarsiMessageBox;
using System.Data.SqlClient;
namespace amlakyar
{
public partial class Login : Form
{
static SqlConnection con = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\amlak.mdf;integrated security=true;User Instance=True");
SqlDataAdapter da = new SqlDataAdapter("", con);
DataSet ds = new DataSet();
string stru;
//*************************************************C LASS VARIABLES

C_Usefull useFull = new C_Usefull();

FileStream fs;
BinaryFormatter bf = new BinaryFormatter();

//*************************************************C LASS VARIABLES
public Login()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
try
{
timer1.Enabled = true;
System.Globalization.PersianCalendar pc = new System.Globalization.PersianCalendar();
DateTime dt = new DateTime();
dt = DateTime.Now;
Class_date cdate = new Class_date();
string date = dt.Year.ToString() + "/" + dt.Month.ToString() + "/" + dt.Day.ToString();
lb_date.Text = cdate.Shamsi(date);
string filePath = Application.StartupPath + @"\AmlakKey.ABS";
if (!File.Exists(filePath))
{
panel1 .Enabled = false;
frm_Activation frmAct = new frm_Activation();
frmAct.ShowDialog();
}
else
{
fs = new FileStream(filePath, FileMode.Open, FileAccess.Read);
Hashtable hash = (Hashtable)bf.Deserialize(fs);
fs.Close();
if (CheckSerialNumber(hash))
{
panel1 . Enabled = true;

}
else
{
panel1.Enabled = false;
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "پیام خطا", MessageBoxButtons.OK, MessageBoxIcon.Error);
panel1.Enabled = false;
}
finally
{
}


}
private bool CheckSerialNumber(Hashtable hash)
{
bool res = false;
string serial = hash["serial"].ToString();
string activationCode = hash["activationCode"].ToString().Remove(5, 20);
if ((serial == C_Usefull.hardSignature()) && (activationCode == C_Usefull.GetActivationCode(serial)))
res = true;
return res;
}
private void ChangeLanguageToFarsi()
{
try
{
CultureInfo farsi = new CultureInfo("fa-IR");
InputLanguage.CurrentInputLanguage = InputLanguage.FromCulture(farsi);
}
catch
{
}
}

private void timer1_Tick(object sender, EventArgs e)
{
timer1.Enabled = true;
System.Globalization.PersianCalendar pcc = new System.Globalization.PersianCalendar();
DateTime tm = new DateTime();
tm = DateTime.Now;
lb_time.Text = pcc.GetHour(tm).ToString() + ":" + pcc.GetMinute(tm).ToString() + ":" + pcc.GetSecond(tm).ToString();

}
private void glassButton1_Click(object sender, EventArgs e)
{
Close();
}
private void glassButton2_Click(object sender, EventArgs e)
{
string struser, s;
if (cmbtype.SelectedItem == "مدیر")

{
struser = "admin";
cls_variable.stru = "مدیر املاک";
}
else
{
cls_variable.stru = "کاربر عادی";
struser = "user";
}
s = "select id from login where type='" + struser + "'and users='" + txtuser.Text + "' and id='" + txtid.Text + "' ";
SqlDataAdapter da = new SqlDataAdapter(s, con);
da.Fill(ds, "t1");
if (ds.Tables["t1"].Rows.Count > 0)
{
this.Hide();
main fm = new main();
fm.ShowDialog();
}
else
{
MessageBox.Show("رمز عبور یا نام کاربری اشتباه می باشد", "اخطار");
}
}

}
}


http://5.lon.ir/files/3onoedqb1aoar268sn9c.jpgراستی فایل کیجن را هم براتون گذاشتم اگه بازم سولی داشتید بپرسید
http://www.lon.ir/up/uploads/1281675759.rar (http://www.lon.ir/up/uploads/1281675759.rar)
موفق باشید

omidrayaneh.68
پنج شنبه 21 مرداد 1389, 18:24 عصر
راستی توجه کنید کد های فرم لود و مقادیر CLASS VARIABLES
را کامل وارد کنید البته فرم لود همش لازم نیست از خط 12 به بعد فرم لود را استفاده کنید من فرم لود کامل پروژه ی خودم را گذاشتم موفق باشید

omidrayaneh.68
پنج شنبه 21 مرداد 1389, 18:31 عصر
اینم از فرم ACTIVITY


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;
using _UseFull;
using FarsiMessageBox;
using System.Runtime.Serialization.Formatters.Binary;
using System.Collections;

namespace amlakyar
{
public partial class frm_Activation : Form
{
//***************************
FileStream fs;
BinaryFormatter bf = new BinaryFormatter();
string serial = "";
//***************************
public frm_Activation()
{
InitializeComponent();
}
private void frm_Activation_Load(object sender, EventArgs e)
{
try
{
serial = C_Usefull.hardSignature();
lblSerial.Text = serial;
}
catch (Exception ex)
{
FMessageBox.Show(ex.Message, "خطا", FMessageBoxButtons.OK, FMessageBoxIcons.Error);
}
}
private void glassButton2_Click(object sender, EventArgs e)
{
try
{
string activationCode = tbActivationCode.Text;
if (activationCode == C_Usefull.GetActivationCode(serial))
{
Hashtable hash = new Hashtable();
hash["serial"] = serial;
hash["activationCode"] = activationCode.Insert(5, activationCode);
string filePath = Application.StartupPath + @"\AmlakKey.ABS";
fs = new FileStream(filePath, FileMode.Create, FileAccess.Write);
bf.Serialize(fs, hash);
fs.Close();
FMessageBox.Show("فعالسازی برنامه با موفقیت انجام شد." + "\n\n" + "از حسن انتخاب شما متشکریم" + "\n\n" + "نرم افزار مشاور املاک", "پیام", FMessageBoxButtons.OK, FMessageBoxIcons.Information);
}
else
{
FMessageBox.Show("کد فعالسازی شما اشتباه است." + "\n\n" + "برای تهیه کد فعالسازی با برنامه نویس تماس حاصل فرمایید." + "\n\n" + "متشکریم.", "پیام", FMessageBoxButtons.OK, FMessageBoxIcons.Warning);
}
}
catch (Exception ex)
{
FMessageBox.Show(ex.Message, "خطا", FMessageBoxButtons.OK, FMessageBoxIcons.Error);
}
}
private void glassButton1_Click(object sender, EventArgs e)
{
this.Close();
}
private void glassButton3_Click(object sender, EventArgs e)
{
FMessageBox.Show("کاربر گرامی توجه داشته باشید بعد از ثبت نرم افزار برنامه را ببندید و دوباره باز کنید " , "پیام", FMessageBoxButtons.OK , FMessageBoxIcons.Question );
}
}
}

http://5.lon.ir/files/pjgeimvvy481nlsoms2h.jpg

محسن شامحمدی
جمعه 22 مرداد 1389, 09:08 صبح
پس چرا میگن قسمت هایی از برنامه که از لحاظ امنیت برنامه رو چک می کنند رو توی یه سری ماژولها یا dll ها قرار بدید تا یه مرحله کشفشون سخت تر شه؟

شرمنده دیر اومدم
دلیل اصلی اینه که کرکر باید دنبال تابع مورد نظر بگردد و اگر در برنامه اصلی نباشد کمی کار پیچیده تر می شود.
البته آنقدرها هم این کار ارزش ندارد چون در نرم افزارهای کرک در بخشی که تابع امنیت برنامه شما صدا زده می شود دیده می شود که این تابع در کدام کتابخانه و با چه نامی در حال اجراست .
ضمنا تو دات نت تمام فایل ها اعم از dll و exe همه اسمبلی(فایل های دات نت) هستند و محتوی کد IL پس دلیلی دیده نمی شود که فایل های dll از لحاظ محتوا با فایل های exe فرق کنند

mojdeh6583
شنبه 23 مرداد 1389, 09:30 صبح
راستی خود فایل dll هم را براتون آپلود کردم لینکش پایین هستراستی فایل کیجن را هم براتون گذاشتم

http://www.lon.ir/up/uploads/1281675759.rar (http://www.lon.ir/up/uploads/1281675759.rar)



مرسی بابت جواب کامل و مفیدتون ولی لینکی که دادید فیلتر شده
میشه همین جا آپ کنید؟
یا جای دیگه ای بزارید تا ببینمش؟
ممنون میشم

mojdeh6583
شنبه 23 مرداد 1389, 09:33 صبح
شرمنده دیر اومدم
دلیل اصلی اینه که کرکر باید دنبال تابع مورد نظر بگردد و اگر در برنامه اصلی نباشد کمی کار پیچیده تر می شود.
البته آنقدرها هم این کار ارزش ندارد چون در نرم افزارهای کرک در بخشی که تابع امنیت برنامه شما صدا زده می شود دیده می شود که این تابع در کدام کتابخانه و با چه نامی در حال اجراست .
ضمنا تو دات نت تمام فایل ها اعم از dll و exe همه اسمبلی(فایل های دات نت) هستند و محتوی کد IL پس دلیلی دیده نمی شود که فایل های dll از لحاظ محتوا با فایل های exe فرق کنند
پس نتیجه می گیریم که اگه dll با زبانی دات نتی نوشته شده باشه هیچ فرقی به حال امنیت نداره ولی انسجام برنامه رو افزایش میده.
حالا این سوال پیش میاد که میشه یه dll به زبان مثلا c++ نوشت و از اون در برنامه ویژوال دات نت استفاده کرد؟
میدونم که برای استفاده از هر چیزی اول بستر فریم ورکش بررسی میشه
ولی خوب پس چیکار کنیم که یه کم امنیت حفظ بشه؟

محسن شامحمدی
شنبه 23 مرداد 1389, 11:59 صبح
متاسفانه بنده در زمینه امنیت نرم افزار اطلاعات زیادی ندارم و فقط همین مطلب را میدانستم

omidrayaneh.68
شنبه 23 مرداد 1389, 18:02 عصر
سلام اینم از کیجن برنامه اگر سولی داشتید بپرسید.

saeedalg
شنبه 23 مرداد 1389, 18:09 عصر
اینکه گفتید میشه dll تو c++ ایجاد کرد یا نه، میشه، با استفاده از COM شما یک Active Template Library میسازید و مثل رفرنس عادی به کد سی شارپتون اضافش میکنید. عکسشم میشه یه کام تو دات نت مینویسید و به برنامه c پلاس پلاستون اضافه میکنین. به دات نت میگن managed به c پلاس پلاسی ها میگن unmanaged.

mojdeh6583
یک شنبه 24 مرداد 1389, 11:26 صبح
سلام اینم از کیجن برنامه اگر سولی داشتید بپرسید.
چیز جالبی بود
مرسی
ولی ابتدایی بود
فقط یه کد رو می گرفت و تبدیل به یه کد دیگه می کرد.

mojdeh6583
یک شنبه 24 مرداد 1389, 11:32 صبح
اینکه گفتید میشه dll تو C++‎ ایجاد کرد یا نه، میشه، با استفاده از COM شما یک Active Template Library میسازید و مثل رفرنس عادی به کد سی شارپتون اضافش میکنید
من هرچی می گردم توی هیچ کجا Active Template Libraryپیدا نمی کنم
میشه بگید کجاست؟

neda630
یک شنبه 14 شهریور 1389, 16:40 عصر
سلام
من یه تازه واردم
ممنون از مطالب مفیدتون
اگر میشه این بحثو ادامه بدید و منبع هم معرفی کنید