ورود

View Full Version : سوال: مخفی کردن و نمایش یک متن در یک فایل bmp



vb8334
جمعه 11 آذر 1390, 23:48 عصر
با سلام به تمامی دوستان

دوستان من می خواستم یه برنامه ای بنویسم که یک متن رو در یه عکس با فرمت bmp مخفی کنه و یک برنامه دیگه که اون متن رو نمایش بده البته در صورتی که کاربر روی عکس کلیک کرد نباید متن نمایش پیدا کنه متن فقط از طریق برنامه باید متن مخفی و نمایش پیدا کنه.

درضمن من از asm16 استفاده میکنم

من از کتاب سید رضی استفاده میکنم در ضمن یه فایل رو می تونم باز کنم در ضمن چطوری می تونم یه فایل bmp رو باز کنم


ممنون

xman_1365_x
یک شنبه 13 آذر 1390, 21:03 عصر
در ساختار فایل های بیت مپ (http://en.wikipedia.org/wiki/BMP_file_format) در قسمت هدر سایز فایل رو تعیین کرده،پس شما خیلی راحت میتونید اطلاعات رو به انتهاش اضافه کنید و برای نمایش مجدد در برنامه از هدر سایز فایل بیت مپ رو بدست میارین و به اون تعداد بایت رو نادیده میگیرین تا به داده های خودتون برسید(دسترسی ترتیبی) و...
و اینکه شما هر فایلی دوست داشتین باز کنید فرقی نمیکنه پسوندش چیه
موفق باشی

IamOverlord
دوشنبه 14 آذر 1390, 11:54 صبح
اگه منظورتون مخفی کردن اطلاعات روی pixel های تصویر هست، این کار خیلی ساده است.
به جای bit های 0 یا 1 از pixel هایی با رنگ زوج یا فرد استفاده کنید.

vb8334
جمعه 25 آذر 1390, 12:42 عصر
من در باز کردن فایل مشکل دارم این کد رو نوشتم ولی فایل باز نمیشه؟:متعجب:


DSEG SEGMENT 'DATA'

handle dw ?
pathnam db 'G:\test1.bmp',00h

DSEG ENDS
;-------------------------
CSEG SEGMENT 'CODE'
main PROC FAR
mov ax,0
mov ds,ax
call open1
mov ax,4c00h
int 21h
main endp

;-------------------------
open1 proc near

mov ah,3dh
mov al,11
lea dx,pathnam
int 21h
mov handle,ax
ret
open1 endp
;-------------------------


CSEG ENDS

END main


ممنون

xman_1365_x
جمعه 25 آذر 1390, 18:28 عصر
من در باز کردن فایل مشکل دارم این کد رو نوشتم ولی فایل باز نمیشه؟
خوب اشتباهاتی که داشتین در خط 10 باید mov ax,DSEG بنویسید برای مقدار دهی درست سگمنت و برای باز کردن فایل باید به al مقادیر زیر رو داد و مقداری که در خط 21 نوشتین اشتباه هست.
mov al, 0 ; read
mov al, 1 ; write
mov al, 2 ; read/write
قبلا نمونه کار با فایل بارها توضیح داده شده با این حال اینم یک مثال دیگه که بدردتون میخوره

org 100h
mov ah, 3ch
mov cx, 0
mov dx, offset filename
mov ah, 3ch
int 21h ; create file...
mov handle, ax

mov bx, handle
mov dx, offset data
mov cx, data_size
mov ah, 40h
int 21h ; write to file...

mov al, 0
mov bx, handle
mov cx, 0
mov dx, 7
mov ah, 42h
int 21h ; seek...

mov bx, handle
mov dx, offset buffer
mov cx, 4
mov ah, 3fh
int 21h ; read from file...

mov bx, handle
mov ah, 3eh
int 21h ; close file...
ret

filename db "myfile.txt", 0
handle dw ?
data db " hello files! "
data_size=$-offset data
buffer db 4 dup(' ')

موفق باشی

vb8334
شنبه 26 آذر 1390, 17:17 عصر
ممنون از اینکه پاسخ دادین

در مورد باز کردن فایل اون کاری که گفتین رو انجام دادم اما بازم فایل باز نشد
و خط 11 ارور میده اون کدی که گذاشتین و خط 36 کارش چیه چون من یه مقدار عددی هم وارد کردم برنامه اجرا شد.

ممنون

xman_1365_x
شنبه 26 آذر 1390, 20:12 عصر
در مورد باز کردن فایل اون کاری که گفتین رو انجام دادم اما بازم فایل باز نشد

خوب حتما بازم در جایی اشتباه نوشتین ، کد رو بزارین تا بگم مشکلش چیه

خط 11 ارور میده اون کدی که گذاشتین و خط 36 کارش چیه چون من یه مقدار عددی هم وارد کردم برنامه اجرا شد.
برنامه ای که گذاشتم سورس نمونه emu8086 هست و با masm و fasm تست کردم مشکلی نداره پیغام خطا رو باید ذکر میکردین اما حدس من اینه شاید اسمبلرتون ورژن قدیمی هست که این دستور پیش پردازنده رو نمیشناسه،خط 36 میاد آدرس انتها رو از آدرس ابتدا کم میکنه تا طول رشته شمارو به عنوان یک ثابت بدست بیاره

vb8334
یک شنبه 27 آذر 1390, 16:32 عصر
اینم از کد:




DSEG SEGMENT 'DATA'

handle dw ?
pathnam db "g:\test1.bmp",00h

DSEG ENDS
;-------------------------
CSEG SEGMENT 'CODE'
main PROC FAR
mov ax,DSEG
mov ds,ax
call open1
mov ax,4c00h
int 21h
main endp

;-------------------------
open1 proc near

mov ah,3dh
mov al,1
lea dx,pathnam
int 21h
mov handle,ax
ret
open1 endp
;-------------------------


CSEG ENDS

END main


ممنون

xman_1365_x
یک شنبه 27 آذر 1390, 17:11 عصر
اینم از کد:




DSEG SEGMENT 'DATA'

handle dw ?
pathnam db "g:\test1.bmp",00h

DSEG ENDS
;-------------------------
CSEG SEGMENT 'CODE'
main PROC FAR
mov ax,DSEG
mov ds,ax
call open1
mov ax,4c00h
int 21h
main endp

;-------------------------
open1 proc near

mov ah,3dh
mov al,1
lea dx,pathnam
int 21h
mov handle,ax
ret
open1 endp
;-------------------------


CSEG ENDS

END main


ممنون

این برنامه مشکلی نداره فایل رو برای نوشتن باز میکنه ،فقط اگر در امولاتور برنامه رو اجرا میکنید باید به مسیر "C:\emu8086\vdrive" برین و فولدری با نام G اضافه کنید!
بزارین روش ساده تر بهتون بگم شما یک فایل رو بخونید بریزین توی بافر بعد به انتهای بافر اضافه کنید دادتون رو و بعد در فایل ذخیرش کنید
موفق باشی

vb8334
یک شنبه 27 آذر 1390, 23:25 عصر
خیلی از شما ممنون که دارین کمکم میکنین

همونطور که گفتین من رفتم G:\Emu8086\vdrive\g تو این مسیر البته من چون emu رو تو درایو g نصب کردم
اینجا فایل g هستش و من با این کدی که گذاشته بودم فایل bmp رو تو این قسمت دیدم یعنی تو فولدر g ولی هیچ عکسی توش نیست و 0 byte هستش

در ضمن در مورد اینکه من ساختار فایل بیت مپ رو نگاه کردم 14 بایت باید باشه چطوری میتونم اون متنم رو توی انتهای فایل bmp اضافه کنم

ممنون از زحماتتون

xman_1365_x
دوشنبه 28 آذر 1390, 14:35 عصر
همونطور که گفتین من رفتم G:\Emu8086\vdrive\g تو این مسیر البته من چون emu رو تو درایو g نصب کردم
اینجا فایل g هستش و من با این کدی که گذاشته بودم فایل bmp رو تو این قسمت دیدم یعنی تو فولدر g ولی هیچ عکسی توش نیست و 0 byte هستش
منظورتون فولدر هست دیگه؟
اگر با امولاتور اجرا میکنید باید فایلتون رو هم در فولدری که ساختین قرار بدین

در ضمن در مورد اینکه من ساختار فایل بیت مپ رو نگاه کردم 14 بایت باید باشه چطوری میتونم اون متنم رو توی انتهای فایل bmp اضافه کنم
شما کاری که میگم رو انجام بدین هدف برنامتون میرسین!

فایلتون رو برای خوندن باز کنید
بعد به اندازهای که نیاز (ببسته به سایز فایل) بخونید بریزید توی بافر
یک بافر دیگه بعد بافر فایل تعریف کنید داده هاتون رو توی اون قرار بدین
حالا فایل رو ببندید و برای نوشتن مجدد باز کنید
حالا به اندازه فایل بیت مپ + بافر خودتون رو در فایل بنویسید
فایل رو ببندید
تا به اینجا میتونید داده رو توی بیت مپ مخفی کنید!
اگر برای مشاهده در برنامه بخواین استفاده کنید حالا باید
فایل رو به اندازه هر دو بافر بخونید و به قسمت بافرتون پرش کنید و نمایش بدین
همین
موفق باشی

mrmadadin
چهارشنبه 30 آذر 1390, 19:48 عصر
با عرض سلام و خسته نباشيد

من هم به برنامه نياز خيلي زيادي دارم لطفا كمك كنيد . اگه برنامه كامل موجود هستش به من هم بديد !!!

با تشكر

Collector
پنج شنبه 01 دی 1390, 21:39 عصر
فایلتون رو برای خوندن باز کنید
بعد به اندازهای که نیاز (ببسته به سایز فایل) بخونید بریزید توی بافر
یک بافر دیگه بعد بافر فایل تعریف کنید داده هاتون رو توی اون قرار بدین
حالا فایل رو ببندید و برای نوشتن مجدد باز کنید
حالا به اندازه فایل بیت مپ + بافر خودتون رو در فایل بنویسید
فایل رو ببندید


سلام

من چطوری میتونم فایل عکسی که 700000 بایت هست رو بخونم.

اگر 16 بیت باشه این ارور رو میده.


(81) cannot be evaluated: 657462
(81) undefined variable or over 16 bits
(99) cannot be evaluated: 657462
(99) undefined variable or over 16 bits


و اگر 32 بیت این ارور رو میده


(81) wrong parameters: MOV ECX,657462
(81) probably it's an undefined var: ECX

ramin9072
یک شنبه 17 دی 1391, 14:48 عصر
من کد رو با برنامه amu اجرا کردم ولی روی خط 12 پیغام خطا میدهد.
همه مراحل رو مو به مو احرا کردم ولی نشد که نشد !