Nghiên cứu lập trình FreeBasic, cú pháp gần giống VB6, tốc độ nhanh như C, biên dịch 32bit và 64bit

Liên hệ QC
4. clsToolTip, clsBitmap : nhờ cái tool này của a mới phát hiện đã có lớp bitmap trong VB6, lại tiếp tục nghiên cứu về imageSearch trong VB6, không hiểu sao dll ImageSearch của AutoIT nó khai báo sử dụng bình thường mà trong vb6 lại ko dùng được.
Anh Kiều Mạnh đã từng nghiên cứu qua việc tìm kiếm 1 hình ảnh có sẵn và xuất ra vị trí xuất hiện của nó trên màn hình chưa?
1631689254124.png
 

File đính kèm

  • ImageSearch.rar
    38 KB · Đọc: 5
4. clsToolTip, clsBitmap : nhờ cái tool này của a mới phát hiện đã có lớp bitmap trong VB6, lại tiếp tục nghiên cứu về imageSearch trong VB6, không hiểu sao dll ImageSearch của AutoIT nó khai báo sử dụng bình thường mà trong vb6 lại ko dùng được.
Anh Kiều Mạnh đã từng nghiên cứu qua việc tìm kiếm 1 hình ảnh có sẵn và xuất ra vị trí xuất hiện của nó trên màn hình chưa?
View attachment 266116
ko xem dược = windows media
1631689825765.png

đó trước đây nó khoãng 40 em virus ... giờ còn 1 em mà tìm hoài ko ra nên tạm bỏ đó
 
ko biết tham số + cách sử dụng hàm sau sao @minhtungph

1631690354351.png
Bài đã được tự động gộp:

Mã:
#include-once
; ------------------------------------------------------------------------------
;
; AutoIt Version: 3.0
; Language:       English
; Description:    Functions that assist with Image Search
;                 Require that the ImageSearchDLL.dll be loadable
;
; ------------------------------------------------------------------------------

;===============================================================================
;
; Description:      Find the position of an image on the desktop
; Syntax:           _ImageSearchArea, _ImageSearch
; Parameter(s):
;                   $findImage - the image to locate on the desktop
;                   $tolerance - 0 for no tolerance (0-255). Needed when colors of
;                                image differ from desktop. e.g GIF
;                   $resultPosition - Set where the returned x,y location of the image is.
;                                     1 for centre of image, 0 for top left of image
;                   $x $y - Return the x and y location of the image
;                   $transparency - TRANSBLACK, TRANSWHITE or hex value (e.g. 0xffffff) of
;                                  the color to be used as transparency; can be omitted if
;                                  not needed
;
; Return Value(s):  On Success - Returns 1
;                   On Failure - Returns 0
;
; Note: Use _ImageSearch to search the entire desktop, _ImageSearchArea to specify
;       a desktop region to search
;
;===============================================================================
Func _ImageSearch($findImage, $resultPosition, ByRef $x, ByRef $y, $tolerance, $transparency = 0)
    Return _ImageSearchArea($findImage, $resultPosition, 0, 0, @DesktopWidth, @DesktopHeight, $x, $y, $tolerance, $transparency)
EndFunc   ;==>_ImageSearch

Func _ImageSearchArea($findImage, $resultPosition, $x1, $y1, $right, $bottom, ByRef $x, ByRef $y, $tolerance, $transparency = 0)
    ;MsgBox(0,"asd","" & $x1 & " " & $y1 & " " & $right & " " & $bottom)
    If Not ($transparency = 0) Then $findImage = "*" & $transparency & " " & $findImage
    If $tolerance > 0 Then $findImage = "*" & $tolerance & " " & $findImage
    $result = DllCall("ImageSearchDLL.dll", "str", "ImageSearch", "int", $x1, "int", $y1, "int", $right, "int", $bottom, "str", $findImage)

    ; If error exit
    If $result[0] = "0" Then Return 0

    ; Otherwise get the x,y location of the match and the size of the image to
    ; compute the centre of search
    $array = StringSplit($result[0], "|")

    $x = Int(Number($array[2]))
    $y = Int(Number($array[3]))
    If $resultPosition = 1 Then
        $x = $x + Int(Number($array[4]) / 2)
        $y = $y + Int(Number($array[5]) / 2)
    EndIf
    Return 1
EndFunc   ;==>_ImageSearchArea

Vãi thế nó đây = code

mấy năm trước cài tools xem DLL VB6 hoài mà thấy như mấy hình trên ko à xong chán bỏ ... suy ra VB6 viết DLL bảo mật tốt hơn cả C#
 
Lần chỉnh sửa cuối:
Đó là file AutoIT anh, trong autoIT ta có 2 biến x,y, khi gọi hàm: $search=_ImageSearch(@ScriptDir & '\Anh.bmp',1,$x,$y,1), thì vị trí của ảnh "Anh.bmp" trong cùng thư mục chạy sẽ gán vào biến x,y
Mã:
    Local $x=0,$y=0
    $search=0
    While $search=0
        $search=_ImageSearch(@ScriptDir & '\Anh.bmp',1,$x,$y,1)
    WEnd
    if $search=1 Then
        MouseClick("left",$x,$y,1)
    EndIf
Bài đã được tự động gộp:

mấy năm trước cài tools xem DLL VB6 hoài mà thấy như mấy hình trên ko à xong chán bỏ ... suy ra VB6 viết DLL bảo mật tốt hơn cả C#
Vb6 biên dịch ra native code luôn mà anh, còn C# nó biên dịch ra P-code, nếu chương trình biên dịch ra để nguyên vậy thì gần như dịch ngược lại 99% code ( còn ngon hơn nữa là chương trình viết bằng c# có thể dịch thành vb.net)
 
Lần chỉnh sửa cuối:
Đó là file AutoIT anh, trong autoIT ta có 2 biến x,y, khi gọi hàm: $search=_ImageSearch(@ScriptDir & '\Anh.bmp',1,$x,$y,1), thì vị trí của ảnh "Anh.bmp" trong cùng thư mục chạy sẽ gán vào biến x,y
Mã:
    Local $x=0,$y=0
    $search=0
    While $search=0
        $search=_ImageSearch(@ScriptDir & '\Anh.bmp',1,$x,$y,1)
    WEnd
    if $search=1 Then
        MouseClick("left",$x,$y,1)
    EndIf
Bài đã được tự động gộp:


Vb6 biên dịch ra native code luôn mà anh, còn C# nó biên dịch ra P-code, nếu chương trình biên dịch ra để nguyên vậy thì gần như dịch ngược lại 99% code ( còn ngon hơn nữa là chương trình viết bằng c# có thể dịch thành vb.net)
vậy cái DLL VB6 đó ko pack cũng đâu có thấy được gì đâu ... thấy sơ sơ như thế thì có cũng như không mà
 
vậy cái DLL VB6 đó ko pack cũng đâu có thấy được gì đâu ... thấy sơ sơ như thế thì có cũng như không mà
chủ yếu mở ra tìm hiểu thông tin thôi anh, với lại có thể đoán được trong đó dùng những hàm gì, và nếu chương trình dùng key đơn giản thì có thể mò ra chỗ lưu key hoặc kiểu mã hoá, như cái exe của a có một số gợi ý từ các hàm API
Mã:
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Private Declare Sub ProgIDFromCLSID Lib "ole32"()
Private Declare Sub CLSIDFromString Lib "ole32"()
Private Declare Sub StringFromGUID2 Lib "ole32"()
Private Declare Sub LoadTypeLib Lib "oleaut32"()
Private Declare Function GetModuleHandle Lib "kernel32" Alias "GetModuleHandleA" (ByVal lpModuleName As String) As Long
Private Declare Function GetProcAddress Lib "kernel32" Alias "GetProcAddress" (ByVal hModule As Long, ByVal lpProcName As String) As Long
Private Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long
Private Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
 
chủ yếu mở ra tìm hiểu thông tin thôi anh, với lại có thể đoán được trong đó dùng những hàm gì, và nếu chương trình dùng key đơn giản thì có thể mò ra chỗ lưu key hoặc kiểu mã hoá, như cái exe của a có một số gợi ý từ các hàm API
Mã:
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Private Declare Sub ProgIDFromCLSID Lib "ole32"()
Private Declare Sub CLSIDFromString Lib "ole32"()
Private Declare Sub StringFromGUID2 Lib "ole32"()
Private Declare Sub LoadTypeLib Lib "oleaut32"()
Private Declare Function GetModuleHandle Lib "kernel32" Alias "GetModuleHandleA" (ByVal lpModuleName As String) As Long
Private Declare Function GetProcAddress Lib "kernel32" Alias "GetProcAddress" (ByVal hModule As Long, ByVal lpProcName As String) As Long
Private Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long
Private Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
khúc api thấy hết mà ... kéo xuống copy hết các hàm đó úp lên luôn đi

Có thấy vị trí lưu keys ko úp luôn lên ... vô tư đi
 
mới lục lại cái tools ngày xưa hay vọc xem ... thì nói rồi cái mớ API ai cũng xem được hết
API
1631694207354.png

Còn code khác nó ra thế này
Mã:
Public Sub Proc_1_3_403CD0
  loc_00403D12: Dim var_30(60415) As Byte
  loc_00403D2D: var_18 = VarPtr(var_24)
  loc_00403DC6: call UBound(00000001h, arg_10, var_18, var_4C, var_18, var_4C, var_18, var_4C, var_18, var_4C, var_18, var_4C, var_18, var_4C, var_30, 00402120h)
  loc_00403DCE: var_ret_1 = UBound(00000001h, arg_10, var_18, var_4C, var_18, var_4C, var_18, var_4C, var_18, var_4C, var_18, var_4C, var_18, var_4C, var_30, 00402120h)
  loc_00403DD4:
  loc_00403DDB: If var_ret_1 < 0 Then GoTo loc_00403E4B
  loc_00403DE4: If ecx = 0 Then GoTo loc_00403E0C
  loc_00403DEA: If ecx <> 1 Then GoTo loc_00403E0C
  loc_00403DF9: var_58 = var_ret_1
  loc_00403DFC: If var_ret_1 < 0 Then GoTo loc_00403E07
  loc_00403DFE: var_eax = Err.Raise
  loc_00403E07: 'Referenced from: 00403DFC
  loc_00403E0A: GoTo loc_00403E12
  loc_00403E0C: 'Referenced from: 00403DE4
  loc_00403E0C: var_eax = Err.Raise
  loc_00403E12: 'Referenced from: 00403E0A
  loc_00403E1F: call __vbaVarVargNofree
  loc_00403E2E: var_50 = CLng(__vbaVarVargNofree)
  loc_00403E40: True = True + var_ret_1
  loc_00403E49: GoTo loc_00403DD4
  loc_00403E4B: 'Referenced from: 00403DDB
  loc_00403E84: var_eax = CallWindowProc(VarPtr(var_24), 0, 0, 0, 0)
  loc_00403E9A: var_38 = CallWindowProc(VarPtr(var_24), 0, 0, 0, 0)
  loc_00403EA6: var_50 = var_30
  loc_00403EAF: Exit Sub
End Sub

và sau nữa ... đó là thấy nguyên Hàm đấy
Mã:
Public Function LoadLib(DLLPath, className) '404310
  loc_00404365: Me.var_1C = PropBag.ReadProperty(DLLPath, DLLPath)
  loc_00404391: GoTo loc_004043AC
  loc_00404397: If var_4 = 0 Then GoTo loc_004043A2
  loc_004043A2: 'Referenced from: 00404397
  loc_004043AB: Exit Sub
  loc_004043AC: 'Referenced from: 00404391
End Function

Mai mốt viết lại các cấu trúc String mã hóa hết là chịu thôi
Bài đã được tự động gộp:

keys đấy ... mã hóa hóa mấy cái string là thua toàn tập
Mã:
Public Sub Proc_1_1_11025A47
  loc_11025AA5: var_28 = CreateObject("Shell.Application", 0)
  loc_11025AD0: var_90 = "\keys.dat"
  loc_11025AE5: call __vbaVarLateMemCallLdRf(var_38, var_28, "Namespace", 00000001h, var_78, var_74, var_70, var_6C, "Self", var_68, "Path", var_68, 0, var_68, ebx)
  loc_11025AF2: call __vbaVarLateMemCallLdRf(var_48, __vbaVarLateMemCallLdRf(var_38, var_28, "Namespace", 00000001h, var_78, var_74, var_70, var_6C, "Self", var_68, "Path", var_68, 0, var_68, ebx))
  loc_11025B23: var_18 = Me. & "\keys.dat"
  loc_11025B4B: GoTo loc_11025B7A
  loc_11025B51: If var_4 = 0 Then GoTo loc_11025B5B
  loc_11025B5B: 'Referenced from: 11025B51
  loc_11025B79: Exit Sub
  loc_11025B7A: 'Referenced from: 11025B4B
End Sub
Bài đã được tự động gộp:

hàm sau là gõ trên Cells lấy dữ liệu qua Internet
Mã:
Public Function GetRsSQL(Ip, Port, FileName, SQL, TieuDe) '110282D0
  Dim var_60 As Me
  Dim var_5C As Me
  Dim var_58 As Me
  Dim var_84 As Me
  loc_1102834D: On Error Resume Next
  loc_1102836A: var_eax = Me.PropBag.WriteProperty(Ip, Port, FileName)
  loc_1102838E: Set Me = var_60
  loc_110283A3: If TieuDe = 0 Then GoTo loc_110283AC
  loc_110283AC: 'Referenced from: 110283A3
  loc_11028415: -1 = Me.Height
  loc_11028441: var_50 = var_74
  loc_11028455: call __vbaRefVarAry(var_50, var_88)
  loc_1102845C: call UBound(00000002h, __vbaRefVarAry(var_50, var_88))
  loc_11028464: UBound(00000002h, __vbaRefVarAry(var_50, var_88)) = UBound(00000002h, __vbaRefVarAry(var_50, var_88)) + 00000001h
  loc_1102846D: UBound(00000002h, __vbaRefVarAry(var_50, var_88)) = UBound(00000002h, __vbaRefVarAry(var_50, var_88)) + 1
  loc_11028479: call __vbaRefVarAry(var_50)
  loc_11028480: call UBound(00000001h, eax)
  loc_11028488: UBound(00000001h, eax) = UBound(00000001h, eax) + 00000001h
  loc_11028491: var_ret_1 = UBound(00000001h, eax)
  loc_11028499: var_20 = var_ret_1
  loc_110284B4: ReDim var_40(1 To var_ret_1)
  loc_110284BD: UBound(00000002h, __vbaRefVarAry(var_50, var_88)) = UBound(00000002h, __vbaRefVarAry(var_50, var_88)) - 1
  loc_110284C5: var_EC = UBound(00000002h, __vbaRefVarAry(var_50, var_88))
  loc_110284D9: If 00000001h > 0 Then GoTo loc_1102878D
  loc_110284E4:
  loc_110284E9: If 00000001h > 0 Then GoTo loc_11028776
  loc_110284F6: If TieuDe = 0 Then GoTo loc_1102864A
  loc_110284FF: If 00000001h <> 1 Then GoTo loc_1102864A
  loc_11028512: Me.Caption = var_60
  loc_11028538: 00000001h = 00000001h - 00000001h
  loc_11028575: Me.var_88 = Forms
  loc_110285C1: var_6C = var_5C
  loc_110285D0: If var_40 = 0 Then GoTo loc_11028614
  loc_110285D6: If var_40 <> 2 Then GoTo loc_11028614
  loc_110285DD: 00000001h = 00000001h - ecx+0000001Ch
  loc_110285E3: If 00000001h < 0 Then GoTo loc_110285EE
  loc_110285E5: var_eax = Err.Raise
  loc_110285EE: 'Referenced from: 110285E3
  loc_110285F0: 00000001h = 00000001h - ecx+00000014h
  loc_110285FC: If 00000001h < 0 Then GoTo loc_11028607
  loc_110285FE: var_eax = Err.Raise
  loc_11028607: 'Referenced from: 110285FC
  loc_11028612: GoTo loc_1102861D
  loc_11028614: 'Referenced from: 110285D0
  loc_11028614: var_eax = Err.Raise
  loc_1102861D: 'Referenced from: 11028612
  loc_11028625: ecx = var_5C
  loc_1102864A: 'Referenced from: 110284F6
  loc_1102864C: 00000001h = 00000001h - 00000001h
  loc_1102865A: var_2C = var_2C - 00000001h
  loc_11028663: var_8C = var_2C
  loc_110286B7: call __vbaVarIndexLoadRefLock(var_74, var_50, var_58, 00000002h, var_88)
  loc_110286CE: Me.BackColor = __vbaVarIndexLoadRefLock(var_74, var_50, var_58, 00000002h, var_88)
  loc_110286E0: If var_40 = 0 Then GoTo loc_1102872C
  loc_110286E6: If var_40 <> 2 Then GoTo loc_1102872C
  loc_110286EC: var_54 = var_54 + var_2C
  loc_110286F5: var_54 = var_54 - ecx+0000001Ch
  loc_110286FB: If var_54 < 0 Then GoTo loc_11028706
  loc_110286FD: var_eax = Err.Raise
  loc_11028706: 'Referenced from: 110286FB
  loc_11028708: 00000001h = 00000001h - ecx+00000014h
  loc_11028714: If 00000001h < 0 Then GoTo loc_1102871F
  loc_11028716: var_eax = Err.Raise
  loc_1102871F: 'Referenced from: 11028714
  loc_1102872A: GoTo loc_11028735
  loc_1102872C: 'Referenced from: 110286E0
  loc_1102872C: var_eax = Err.Raise
  loc_11028735: 'Referenced from: 1102872A
  loc_11028740: ecx = var_84
  loc_11028761: 00000001h = 00000001h + 00000001h
  loc_11028771: GoTo loc_110284E4
  loc_11028776: 'Referenced from: 110284E9
  loc_1102877B: 00000001h = 00000001h + var_2C
  loc_11028788: GoTo loc_110284D3
  loc_1102878D: 'Referenced from: 110284D9
  loc_110287A9: var_3C =
  loc_110287C1: var_eax = call Proc_9_1_1102EAD0(Me.SaveProp, , )
  loc_110287D7: var_6C = Err
  loc_110287ED: var_CC = CBool(Err)
  loc_110287FF: If CBool(Err) = 0 Then GoTo loc_1102881D
  loc_11028811: var_60 = Me.Name
  loc_1102881D: 'Referenced from: 110287FF
  loc_1102881F: On Error Resume Next
  loc_11028825: Exit Sub
  loc_11028830: GoTo loc_1102887B
  loc_11028836: If var_C = 0 Then GoTo loc_11028841
  loc_11028841: 'Referenced from: 11028836
  loc_1102887A: Exit Sub
  loc_1102887B: 'Referenced from: 11028830
  loc_11028890: Exit Sub
End Function
 
Lần chỉnh sửa cuối:
Nhân tiện nói chuyện Virus ... tôi chỉ cho ai đó 1 chút thôi còn lại tự mò mà check lấy sau này viết code cho nó chặt chẽ chút ... Vì viết trên Tools từ VB6 trở lên là mã nhị phân nên nó rất nghiêm ngặt chứ ko như VBA ... khai báo kiểu từa lưa hột dưa = ok tuốt

VD : trên đầu Module tôi khai báo như sau

Private bKey As Byte

lập tức báo Virus Unsafe

Vì tôi sử dụng lại biến bKey cho rất nhiều hàm nên làm biếng khai vậy cho nhanh
xong tôi chuyển nó vào Sub ... biến mất con virus kia ngay lập tức .... Tại sao ư mò diết khắc biết thôi
Mã:
Private Function GetKeyServer() As String    
    Dim bKey As Byte  
End Function

Mò diết xong nhớ thấy báo virus gì là nghi nó ở sub Or hàm nào mới viết thôi ... xong check chút là ra

Vui lòng ko trích dẫn bài này vì ko thích bàn nhiều chuyện ===> thế tôi ===> bu vào nhọc lắm
 
Lần chỉnh sửa cuối:
Web KT
Back
Top Bottom