전체 글
- 몰타 라이센스 가진 카지노 목록 2021.03.04
- Reverse-Engineering 기술 해킹고급편 2021.03.03
- 금융 결제 해킹사례 2021.03.03
- 도박사이트 해킹 고등학생도 한다 2021.03.03
- 해커들의 재능낭비 - 카지노 해킹 2021.03.03
- 슬롯게임 코딩 교육예제 2021.03.03
- 지불정보 이동 코딩 2021.03.03
- UPI 코딩 다중 페이먼트 2021.03.03
- dutils 를 이용한 data sync 2021.03.03
- 슬롯게임의 보안문제 2021.03.03
- 실제 온라인카지노 업체들의 관리하는 데이터 목록 2021.03.03
- rsync 설정 방법 2021.03.03
- 벡터내 데이터 접근 2021.03.03
- 배치실행 2021.03.03
- IDE R 실행 2021.03.03
- 떠들썩했던 온라인 카지노 조작, 누구도 알려주지않는 2021.03.03 1
몰타 라이센스 가진 카지노 목록
Reverse-Engineering 기술 해킹고급편
원래 하드웨어에만 적용되었던 프로세스, 리버스 엔지니어링은 이제 소프트웨어, 데이터베이스 및 인간의 DNA에도 적용됩니다.
리버스 엔지니어링은 컴퓨터 하드웨어 및 소프트웨어에서 특히 중요합니다.
프로그램은 다른 프로그래머가 이해할 수있는 C ++ 또는 Java와 같은 언어로 작성됩니다.
보안 결함과 의심스러운 개인 정보 보호 관행을 노출 할 수도 있습니다. 예를 들어 Dallas 기반 Digital : Convergence Corp.의 CueCat 스캐닝 장치를 리버스 엔지니어링 한 결과값을 이용해 역추척하는 해킹기술로
도출결과가 같을수 있으나 구조변경을 통한 보안결함에 침투.
금융 결제 해킹사례
사이트를 스캔 한 결과 app / code / core / Mage / Payment / Model / Method / Cc.php 파일 에서 악성 코드를 발견했습니다
타사 사이트에 체크 아웃 과정에서 고객이 제출 한 모든 정보를 전송하도록 설계되어
결제와 동시에 정보유출로 이루어져 전송폼 과 결재 암호화 중간에 실행된다.
앞서 애기했던것과 비슷한 맥락으로 정보를 다른곳으로 보냄으로 이중청구가 되는것이다.
java-e-shop .com/add URL to XXXXXXXXXXXXXXXXXX
components/com_jdonation/payments/os_authnet.php
2021/03/03 - [분류 전체보기] - 떠들썩했던 온라인 카지노 조작, 누구도 알려주지않는
도박사이트 해킹 고등학생도 한다
www.yna.co.kr/view/AKR20160307073400004
불법 도박사이트 해킹해 수천만원 빼돌린 고교생 해커 일당 | 연합뉴스
(서울=연합뉴스) 채새롬 기자 = 인터넷 서버 해킹 기술을 익혀 온라인 도박사이트와 게임사이트 등을 해킹한 뒤 사이버머니를 빼돌린 고교생 일당이...
www.yna.co.kr
충분히 가능한일이다. 아래 작성한글을 보면 수많은 기술이 있다는걸 알수있다.
불법사이트 먹튀는 근절되어야하며. 사용하지도 만들어서도 안된다.
일반인들이 모를뿐이지 소프트웨어의 조작은 실력만 있으면 얼마든지 할 수 있다.
일례로 북한해커들은 정부에서 지원하여 세계에서 실력이 최고수준이다.
단순DB의 조작은 아주 쉬운축에 속하며, 슬롯게임 조작, 충전루트 수정 등 고급기술이 날로 발전한다.
아래의 글을 보고 얼마나 위험천만한 것인지 인지하여야한다.
해커들의 재능낭비 - 카지노 해킹
요즘 해커들은 DB조작의 경우 걸릴요소가 많아
Credit입금과정을 조작하여 임의ID에 입금승인이 나면 임의ID는 물론 다른ID에도 충전하게 post매게 혹은 토큰정보에 변수조작하여 카지노를 골탕먹인다.
입금정보는 예전 데이타를 가져오기때문에 카드,은행에 정보요청하기 전에는 밝혀내기가 힘들다.
결제가 승인되면 아래와 같이 코딩을 수정하여 token ID 매개변수를 추가 할수 있다.
function TokenHandler(token) {
// Insert the token ID into the form so it gets submitted to the server
var form = document.getElementById('payment-form');
var hiddenInput = document.createElement('input');
hiddenInput.setAttribute('type', 'hidden');
hiddenInput.setAttribute('name', 'stripeToken');
hiddenInput.setAttribute('value', token.id);
form.appendChild(hiddenInput);
// Submit the form
form.submit();
슬롯게임 코딩 교육예제
현재 Main.qml파일을 qml다음 구현
import Felgo 3.0
import QtQuick 2.0
GameWindow {
id: gameWindow
// You get free licenseKeys from https://felgo.com/licenseKey
// With a licenseKey you can:
// * Publish your games & apps for the app stores
// * Remove the Felgo Splash Screen or set a custom one (available with the Pro Licenses)
// * Add plugins to monetize, analyze & improve your apps (available with the Pro Licenses)
//licenseKey: "<generate one from https://felgo.com/licenseKey>"
activeScene: scene
// the size of the Window can be changed at runtime by pressing Ctrl (or Cmd on Mac) + the number keys 1-8
// the content of the logical scene size (480x320 for landscape mode by default) gets scaled to the window size based on the scaleMode
// you can set this size to any resolution you would like your project to start with, most of the times the one of your main target device
// this resolution is for iPhone 4 & iPhone 4S
width: 960
height: 640
Scene {
id: scene
// the "logical size" - the scene content is auto-scaled to match the GameWindow size
width: 480
height: 320
// properties for the game
property int betAmount: 4 // amount to bet per line
property int creditAmount: 400 // player credit for gambling
// fill game window with background
Rectangle {
anchors.fill: scene.gameWindowAnchorItem
color: "#400000"
}
}
}
상단 바 생성
상단 막대는 게임 로고 및 크레딧 금액과 같은 추가 항목을 포함하는 장면
이러한 요소에 대해 별도의 QML 항목을 만드는 것이 좋습니다. 폴더에 새 파일 TopBar.qml을 qml만들고 다음 코드로 채 웁니다.
import Felgo 3.0
import QtQuick 2.0
Item {
id: topBar
height: 50
// add background
Image {
anchors.fill: parent
source: "../assets/BGTopBar.png"
}
// add logo
Image {
width: 241
height: 46
anchors.top: parent.top
anchors.horizontalCenter: parent.horizontalCenter
source: "../assets/Logo.png"
}
// add gold image (credits)
Image {
id: goldImage
width: 36
height: 30
anchors.top: parent.top
anchors.right: parent.right
anchors.topMargin: 8
anchors.rightMargin: 4
source: "../assets/Coins.png"
}
// add gold amount (credit amount)
Text {
anchors.verticalCenter: goldImage.verticalCenter
anchors.right: goldImage.left
text: scene.creditAmount
color: "white"
font.pixelSize: 12
}
}
각 라인 이미지는 전체 슬롯 머신 높이를 포함합니다.
심볼의 동적 생성을 실현하기 위해 몇 가지 단계를 수행
- 라인의 모든 슬롯 위치를 확인하여 플레이어가 이겼는지 확인
- 이 점검 중에 승리를 담당하는 선의 위치와 기호를 기억해야함
- 기반으로 동적으로 선 심볼을 만들고 선 위에 배치
지금은 유효성 검사 단계를 건너 뛰고 3 단계에 집중하겠습니다. 라인을 올바르게 표시하기위한 기본 QML 구조를 생성하기 위해 폴더에 새 파일 WinningLine.qml을 추가 qml/slotmachine합니다.
Item {
id: winningLine
// line fills up the area of its parent, the container for all lines has to match the slot machine height
anchors.fill: parent
// we want to set a different line image from the outside for each line
property alias image: lineImage
// the color of the winning line is used to draw symbols on the line in the correct color
property string color
// a line is represented as an array of slot positions
property var positions: [] // each position has to be an object { reel: <reelNr>, row: <rowNr> }
// property to hold amount of win
property int winAmount
// field that will hold positions that won after validation
property var __winningPositions: []
// field to hold symbol type of positions that won
property var __winningTypes: []
// field to hold dynamically created line symbols that form a line
property var __lineSymbols: []
// show the image of the line
Image {
id: lineImage
anchors.fill: parent
}
// area that will hold dynamically created line-symbols
Item {
id: symbolArea
anchors.horizontalCenter: parent.horizontalCenter
anchors.verticalCenter: parent.verticalCenter
// display win amount
Text {
id: winText
x: 15
color: "black"
text: winAmount
font.pixelSize: 10
z: 2
}
// add background area around win text
Rectangle {
width: winText.width + 20
height: winText.height + 4
anchors.centerIn: winText
color: winningLine.color
z: 1
}
}
// draw symbols on winning line, parameter machine holds a reference to the slot machine
function drawLineSymbols(machine) {
// remove old symbols
removeLineSymbols()
// set size of symbol container to match slot machine
// this is needed to be able to position the symbols on the line relatively to
// the slot machine instead of the winning line area (winning line is wider than the slot machine)
symbolArea.width = machine.width
symbolArea.height = machine.height
// define y-offset for each line symbol, this is required because the symbol size of the slot machine items includes a top margin of 5px
var yOffset = 5
// create all line symbols for winning positions
for(var i = 0; i < winningLine.__winningPositions.length; i++) {
// set properties for line symbol
var properties = {
// the symbol background and border should be colored in the line color
color: winningLine.color,
// set correct position and height
x: Math.round((machine.defaultReelWidth * winningLine.__winningPositions[i].reel)),
y: Math.round((machine.defaultItemHeight * winningLine.__winningPositions[i].row) + yOffset),
width: machine.defaultReelWidth,
height: machine.defaultItemHeight - 10,
// set symbol type
type: winningLine.__winningTypes[i]
}
// dynamically create line symbol and add it symbol area
var component = Qt.createComponent(Qt.resolvedUrl("LineSymbol.qml"))
var symbol = component.createObject(symbolArea, properties)
// memorize all symbol objects that are created
winningLine.__lineSymbols.push(symbol)
}
// set y position of win text (different for each line)
if(__winningPositions[0].row === 0) {
// on the first row: write win text below first symbol of the line
winText.y = winningLine.__lineSymbols[0].y + winningLine.__lineSymbols[0].height
}
else {
// on other rows: write win text above first symbol of the line
winText.y = winningLine.__lineSymbols[0].y - winText.height
}
}
// remove symbols from winning line
function removeLineSymbols() {
// destroy all line symbols
for(var i = 0; i < winningLine.__lineSymbols.length; i++) {
winningLine.__lineSymbols[i].destroy()
}
// delete memory
winningLine.__lineSymbols = []
}
}
함수는 다음 작업을 처리
- 이 validate()기능은 모든 라인의 유효성을 검사하고 플레이어가 이기면 라인을 기억하고 라인의 승리 금액으로 총 승리 금액을 증가 그런 다음 실제 플레이어 크레딧을 총 승리 금액만큼 늘리고 true플레이어가 적어도 한 줄에서 이기면 반환
- 이 reset()함수는 새 슬롯 머신 스핀을 위해 유효성 검사기를 준비 유효성 검사기의 경우 모든 라인을 숨기고 라인 을 표시하는 타이머 를 중지하는 것으로 충분
- 이 showWinningLines()함수는 첫 번째 승리 라인 을 표시하고 Timer를 시작합니다. 이 기능은 일정 시간이 지난 후 다른 라인을 표시
- showLine함수 ()에 기초하여 원 광고 표시 index파라미터. 또한 현재 보이는 라인의 인덱스를 기억
- 이 hideAllLines()함수는 단순히 visible모든 행 의 속성을로 설정합니다 false.
요약하자면, 우리는 우승 한 모든 라인의 표시를 번갈아 표시 할 수있는 Timer와 두 개의 속성을 추가했습니다.
이를 위해 우리는 라인의 유효성을 검사 할 때이긴 라인을 기억합니다.
이 showWinningLines()함수를 사용 하여 유효성 검사 단계 후 라인 표시를 시작할 수 있습니다 .
그리고새 게임을 시작할 때이 reset()기능을 통해 모든 것을 다시 숨길 수 있습니다. 이제 남은 것은 씬에 유효성 검사기를 추가하고 올바른 위치에서 이러한 함수를 호출하는 것입니다.
qml/Main.qml:
GameWindow {
id: gameWindow
// ...
Scene {
// ...
// add slot machine
FlaskOfRumMachine {
// ...
}
// validator to check if player has won
WinValidator {
id: winValidator
height: slotMachine.height // height is the same as slotmachine height
width: Math.round(height / 240 * 408) // width/height ratio should remain constant
anchors.centerIn: scene.gameWindowAnchorItem
}
// ...
// start slot machine
function startSlotMachine() {
if(!slotMachine.spinning && scene.creditAmount >= scene.betAmount) {
bottomBar.startActive = true
// reduce player credits
scene.creditAmount -= scene.betAmount
// start machine
winValidator.reset()
var stopInterval = utils.generateRandomValueBetween(500, 1000) // between 500 and 1000 ms
slotMachine.spin(stopInterval)
}
}
// when spin is finished -> validate result
function spinEnded() {
bottomBar.startActive = false
var won = winValidator.validate(slotMachine)
if(won)
winValidator.showWinningLines()
else if(bottomBar.autoActive)
startSlotMachine()
}
}
}
완성된 슬롯 화면
지불정보 이동 코딩
In addition, if you use one of our Client libraries, upgrade to the latest version of the library in order to use the Payment Intents API.
-
payments
array (contains the payment object)
An array of payments that are complete. Payments that you just created with the create payment call do not appear in the list.
-
count
integer
The number of items returned in each range of results. Note that the last results range might have fewer items than the requested number of items.
Maximum value: 20.
-
next_id
string
The ID of the element to use to get the next range of results.
트렌젝션 정보ID
4000002500003155
|
Required on setup or first transaction | This test card requires authentication for one-time payments. However, if you set up this card using the Setup Intents API and use the saved card for subsequent payments, no further authentication is needed. |
4000002760003184
|
Required | This test card requires authentication on all transactions. |
4000008260003178
|
Required | This test card requires authentication, but payments will be declined with an insufficient_funds failure code after successful authentication. |
4000000000003055
|
Supported | This test card supports authentication via 3D Secure 2, but does not require it. Payments using this card do not require additional authentication in test mode unless your test mode Radar rules request authentication. |
UPI 코딩 다중 페이먼트
Redirect
Form of redirection to “Redirect” payment gateway
<form action="https://gw.sandbox.gopay.com/gw/v3/dfgvmwTKK5hrJx2aGG8ZnFyBJhAvF" method="post"> <button name="pay" type="submit">Zaplatit</button> </form>
The payment gateway can also be operated in the option with Redirect. You can use the form below or redirect to the URL (gw_url) obtained during creation of the payment.
Form’s parameterDescriptionRequired
action | gw_url of created payment | YES |
method | HTTP method | YES |
User-Agent Header
User-Agent header must be supplied with all Merchant API requests prior to placing any live transactions.
For example:
-
MyAfterpayModule/1.0.0 (E-Commerce Platform Name/1.0.0; PHP/7.0.0; Merchant/60032000)
DescriptionExample Data AboveOther Merchant Examples
Afterpay Plugin |
MyAfterpayModule/1.0.0 |
Custom Plugin/1.0 Shopify Plugin/3.5.1 AfterpayCartridge/1.0 AfterpayExtension/2.9 |
Platform |
E-Commerce Platform Name/1.0.0 |
Websphere Commerce/8.1 Commerce Cloud/1.1 * Magento/2.3.0 |
System Information |
PHP/7.0.0 |
PHP/7.2.18 Ruby/2.5.3 * Java/8.3 |
dutils 를 이용한 data sync
4.2.1 dua, dush 은 무엇 인가 ?
dua, dush 는 Encluster-HPC 의 다중 서버 관리 도구이다.
즉 여러대의 서버에 file 및 작업 명령을 일괄적으로 처리하도록 해주는 프로그램이다.
dua, dush 를 정상적으로 사용하기 위해서는 앞에서 설명한 rsh, rlogin 서비스 설정 이 완료되어 있어야 한다.
4.2.2 rsh, rlogin 설정 하기
rlogin, rsh 관련 서비스를 구동하기 위해서는 rsh, rsh-server 두개의 패키지가 설치가 되어져 있어야 한다. 먼저 xinetd 데몬에서 rsh, rlogin 서비스를 사용할 수 있도록 설정을 변경한다.
# vi /etc/xinetd.d/rsh ----------------------------------------------------------------------------- service shell { disable = no socket_type = stream wait = no user = root log_on_success += USERID log_on_failure += USERID server = /usr/sbin/in.rshd
슬롯게임의 보안문제
라이센스가 중요한 이유는 카지노가 허가 된 관할권에 따라 도박 사이트가 수행해야하는 특정 의무가 있습니다.
Malta Gaming Authority (MGA)와 같은 대부분의 관할권에는 자체 데이터 보호법이 있습니다. 거기에 따라 라이센스가 부여 된 모든 카지노는 해당 국가의 데이터 법률을 준수해야합니다.
대부분의 게임 라이센스는 카지노가 플레이어의 자금을 운영 비용과 별도로 유지하는 경우에만 발급됩니다. 이를 "분리 된 펀드"라고합니다.
규제는 카지노가 파산하거나 청산되는 경우이를 요구합니다. 플레이어 자신 만 인출 할 수있는 플레이어 자금을 보관하기 위해 별도의 은행 계좌를 설정해야합니다. 따라서 자금은 어떤 경우에도 항상 현금화 할 수 있습니다. 라이센스는 또한 독립 소프트웨어 감사도 정기적으로 수행되어야한다고 규정합니다.
불법사이트들과 달리 게임서버와, 이용자정보 사이트도 구별해놓았으며,
인출불가의 사태를 막기위해 법률에의해 관리된다.
불법사이트들은 이러한 어떠한 안전장치도 없기때문에 속수무책으로 당할수밖에 없다.
서버가 털리면 모든 데이타 뿐만아니라 개인정보까지도 유출되기 때문이다.
보통 해커들은 큰 이슈를 만들지 않고 서버에 접속하여 약간의 조작만으로 골탕을 먹인다.
그 만큼 사설서버들은 접속도 쉽고, 조작도 쉽다.
게임컨텐츠를 바꿔치기만해도 배당율이 달라지고, 사용자정보DB만 수정해도 잘 모르는 경우가 태반이다. 그만큼 관리가 허술하다는것이다. 불법토토사이트도 마찬가지이다.
게임컨테츠를 바꾸기는 힘들지만, 배팅이력을 조작하여 DB를 만지는것은 쉬운일이다.
불법사이트이긴하지만 그 사이트를 허락없이 들어가 데이타를 조작하는것 또한 불법이다.
수많은 해외에 혹은 한국에 서버를 두고 성행하는 업체들이 있다. (내가 만든 게임으로..)
먹튀를 하고도 버젓이 영업하는곳을 규제할 어떤 곳도 없다.
실제 온라인카지노 업체들의 관리하는 데이터 목록
대다수의 합법적으로 운영되고 있는 온라인카지노회사들은 관할국가의 규정에 따라 운영됩니다.
특히 요즘은 개인정보관리법이 강화되어, 익명의 이용자들이 자금세탁을 할수 없게 운영됩니다.
우선 고객들의 기본데이타에 대한 의무조항이 있습니다.
금융거래에 대한 의무조항이 있어 이에 맞게 데이타를 관리합니다.
특정나라에서는 과도한 겜블중독을 막기위해 일정시간이 지나면, 혹은 입금한도를 정해놓는게 필수 사항입니다.
모든게임이력은 실시간 데이타를 축적합니다. 잘 갖추어진 회사는 데이타를 바로 모니터링하여
이상데이타가 접수되면 바로 추적할수 있는 시스템을 가지고 있습니다.
보통의 회사들은 데이타를 축적만하고, 사용자가 출금시 데이타의 이상유무를 판단하여 입출금의 심사가 이루어지고 있습니다.
일련의 과정들이 이루어질동안 수많은 스캠이 있습니다. 예를 들어 예상치못한 서버접근, 원본데이타의 수정흔적, 금융거래 오류등이 있으며 보안담당자는 선례를 바탕으로 즉각적인 반응을 해야할것입니다.
제가 생각하는 카지노사업은 모든 시스템에서 가장 많은 압박을 받기 때문에 성장하는게 당연하고 생각듭니다.
janghopark@protonmail.com
rsync 설정 방법
rsync 가 사용하는 프로토콜로는 rsh 나 ssh를 사용하거나 특정 포트를 이용하 여 xinetd 데몬으로 제어도 가능하다.
보통 873 포트를 사용한다.
ssh 를 이용한 사용방법과 873 port 를 이용한 사용방법은 다소 차이가 있다.
873 port 사용방법 rsync 를 사용할 리눅스 버젼이 6.x 일경우에는 /etc/inetd.conf 에 다음줄을 추가한다.
rsync stream tcp nowait root /usr/bin/rsync rsyncd --daemon 만일 리눅스 버젼이 Redhat 7.x ~ 9 이면... /etc/xinetd.d/rsync 파일을 만들어 준다.
---------------------------------------------------------------------- service rsync { disable = no socket_type = stream wait = no user = root server = /usr/bin/rsync server_args = --daemon log_on_failure += USERID } ----------------------------------------------------------------------
그리고 /etc/services 에 다음 내용이 있는지 확인하고 없으면 추가한다
벡터내 데이터 접근
벡터는 [ ] 안에 인덱스를 적어서 각 요소를 가져올 수 있다. 이때, 인덱스는 다른 언어와 달리 1 로 시작한다
> x <- c ( " a " , " b " , " c " ) > x [1] [1] " a " > x [3] [1] " c "
또 ‘-인덱스’ 와 같이 음수의 인덱스를 사용해 특정 요소만 제외할 수도 있다.
> x <- c ( " a " , " b " , " c " ) > x [ -1] [1] " b " " c " > x [ -2] [1] " a " " c "
위의 코드에서 x[-1]은 제일 첫번째 요소인 “a”를 제외한 경우이고, x[-2]는 두번째 요소인 “b”를 제외한 경우이다. 벡터의 여러 위치에 저장된 값을 가져오려면 ‘벡터명[색인 벡터]’의 형식을 사용한다.
> x <- c ( " a " , " b " , " c " ) > x [ c (1 , 2) ] [1] " a " " b " > x [ c (1 , 3) ] [1] " a " " c "
‘x[start:end]’ 를 사용해 start부터 end까지 (end에 위치한 요소 포함)의 데이터를 볼 수도 있다.
> x <- c ( " a " , " b " , " c " ) > x [1:2] [1] " a " " b " > x [1:3] [1] " a " " b " " c "
벡터의 각 셀에 names()를 사용해 이름을 부여해 두었다면, 이 이름을 사용해 데이터를 접근 할 수 있다
벡터의 길이는 length() 또는 NROW() (대문자임에 주의!) 를 통해 알 수 있다. 본래 nrow()는 행렬(Matrix)의 행의 수를 알려주는 함수이지만 nrow()의 변형인 NROW()는 인자가 벡터인경우 벡터를 n행 1열의 행렬로 취급해 길이를 반환한다.
배치실행
데이터 분석은 R 명령어를 인터렉티브 환경에서 실행하면되지만, 데이터 분석을 장시간 수행 해야한다거나 반복적인 작업을 종종 해야한다면 배치파일을 만들 수 있다. 다음은 Rscript를 사용해 코드를 .R 파일에 저장하고 배치로 실행하는 예이다.
$ cat > x.R
# ! / usr / bin / env Rscript print ( " hello " ) ^ D $ chmod u + x x.R $ . / x.R [1] " hello "
또는 R코드를 .R 확장자의 파일에 저장한뒤 다른 R 스크립트에서 source(“파일명.R”) 형 태로 실행할 수도 있다. 이를 활용해 데이터 로딩은 data load.R에 구현하고, 데이터 분석은 data analysis.R에 저장한뒤 main.R을 다음과 같이 구성할 수 있다.
source ( " data _ load.R " )
source ( " data _ analysis.R " )
R의 가장 큰 장점중 하나는 사용자들이 구축해 놓은 방대한 라이브러리이다. 이 라이브러리 들은 목록은 CRAN에 접속하여 좌측 메뉴에서 ‘Packages’를 눌러 확인해 볼 수 있다. 특히 CRAN Task Views 페이지로 들어가면 각 패키지들을 Bayesian, ChemPhys, Cluster, Differential Equations, ... 등으로 분류해 놓을 것을 볼 수 있는데 각 분류를 눌러 들어가면 어떤 상황에서 어떤 패키지를 사용할 수 있는지 보다 쉽게 확인할 수 있다. 한 예로 R에서 random forest 알고리즘을 지원하는 randomForest 패키지를 사용하는 경우 를 생각해보자. 먼저 다음과 같이 install.packages(“패키지명”) 명령어를 사용해 randomForest 를 설치한다. install.packages()명령어를 입력하면 mirror를 선택하는 화면이 나오는데 Korea 또는 원하는 mirror를 선택하면 된다
패키지를 설치한 뒤 시간이 지나 새로운 버젼이 나왔다면 update.packages() 를 사용해 패 키지들을 업데이트 할 수 있다. 이 명령을 (인자없이) 입력하면 설치된 패키지들을 확인해 최신 버젼을 설치해준다. 설치된 패키지를 사용하려면 library(패키지명), 또는 require(페키지명)을 사용해 패키지를 불러들인다
IDE R 실행
IDE R을 실행한뒤 TAB 키를 누르면 명령어를 자동완성시켜주고, 키보드 화살표 위 아래를 눌러서 이전/이후 history의 명령어를 실행할 수 있으므로 콘솔에서의 기본적인 지원도 그리 나쁘지않다. 그래도 한번쯤은 반드시 찾아보는 것이 IDE가 아닐까 한다. R에는 기본적인 GUI 도구(그림 2.7)가 딸려오지만, 그다지 많은 기능이 지원되지는 않는다.
만약 GUI와 메뉴 등이 필요하다면 기본 제공 GUI 보다는 RStudio(그림 2.8)가 많이 언급 되고 있고 또 사용하기에도 괜찮은 편이다.
RStudio는 명령 콘솔외에 파일 편집, 데이터 보기, History, 차트 등을 손쉽게 접근할 수 있게 해준다. 만약 R 프로그램을 편집기에서 입력하면서 동시에 방금 입력한 내용을 곧바로 콘솔에 보내는 방법으로 코딩하고 싶다면 메뉴에서 ‘Code’부분을 살펴보면 된다. 코드의 처음 부터 현재줄까지, 또는 에디터의 코드 한줄씩을 쉽게 실행할 수 있다. Vim 사용자라면 Vim-R-Plugin을 사용할 수 있다. Vim-R-Plugin은 screen 또는 tmux와 함께 사용하는 도구로, 화면을 에디터(vim)/R 콘솔/객체 브라우저로 나누어 작업할 수 있게 해준다. 그림 2.9은 vim r plugin을 사용해 특정 코드 블럭을 R콘솔로 보내 실행하는 화면이다
Emacs 사용자라면 Emacs-ess를 사용할 수 있다. 이 외에도 Geany와 같은 IDE 환경을 사용하거나 간단하게는 리눅스 데스크탑 환경 중 하 나인 GNOME에 기본적으로 설치되는 gedit를 사용할 수 도 있다. 이 중 한가지 툴을 추천하자면 RStudio 가 가장 낫다고 생각된다. 무료로 제공되는데다가 사용하기에도 편리하다.
다음시간엔 배치실행을 알아보자
떠들썩했던 온라인 카지노 조작, 누구도 알려주지않는
이용자에게 해킹에 대한 경감심을 통해 도박근절, 불법사이트 행태에대한 단도목적의 컨텐츠임을 밝힙니다. 카지노 IT 기술 전문가로 인터넷에 없는 실정보 공유의 목적입니다.
온라인카지노, 온라인슬롯머신의 해킹은 가능한것인가?
정답은 "그렇타"이다.
절때 있을수 없는 일일까? 그 누구도 말해주지 않는 불편한 진실
기술이 발전하였다해도 소프트웨어의 임의변경, 통신데이타 변경등은 여전히 가능하다.
불법이라 수면위에 나오지 않을을뿐 사실 가능하다.
서두에 말했듯이 항상 경감심을가지며 사기성영상에 불과하다는 사실을 잊지 말아야한다. 이제 펙트로 설명드리겠다.
https:// “게임제조사서버”/”슬롯게임주소”/게임설정값(언어,화폐) / 온라인카지노서버/토큰주소이용해 이용자ID정보 /
보통은 위와같은 형식으로 온라인슬롯게임이 불러와진다.
라이브게임도 마찬가지다.
카지노사이트가 아닌 게임제조사서버에 게임을 불러와 이용자ID랑 매칭으로 게임이 불러오는 구조이다.
제조사 마다 불러오는 주소는 약간씩 다르나 보통 비슷한 구조이다.
제조사는 국가별/카지노별/ 제공되는 컨텐츠가 다르기때문에 분리하여 생성한다.
- 배급사 게임 컨텐츠 조작
보통 해커들은 게임배급사의 게임컨텐츠를 조작하여 다수의 이용자가 돈을 벌게하여 자신의 정보를 은닉한다.
하지만 게임컨텐츠의 RTP 임의수정을 막기위해 카지노국가기관(예를들어 MGA: Malta gaming authrity)에서 관리하여 RTP값에 대한 모니터링은 배급사, 기관에서 이루어지기 때문에 해커가 수정이 가능하여도 금방 막아 피해를 줄이기 때문에 단시간, 조작 이루어진게 바로 탈로난다.
허나 불법사이트들의 주소는 어떨까 라이센스가없기때문에 실제슬롯게임제조사에서 쓰지 못하기 때문에 불법으로 컨텐츠를 유통하는 회사들에게 임대하여 쓰고 있다.
불법컨텐츠는 겉보기에는 같아도 관리가 없어 임의로 수정, 변경 조작이 가능하다.
또한, 불법컨텐츠사이트는 불법사이트마다 서버를 만들어 임의의 공격에 한 사이트만 피해를 봄으로써 피해를 최소화 시킨다.
다수의 해커들이 서버보안이 허술한점을 이용 SQL 인젝션 기술만으로 게임조작, DB변경,DDOS 공격한다. 실례를 기사에도 쉽게 찾아볼수 있을것이다.
- 온라인카지노사이트 정보변경
앞에서 컨텐츠의 변경에 대해 알아보았다면 이번엔 운영하는 카지노사이트정보 DB를 변경하는 방법을 알아보자.
우선 합법적 운영되고 있는 카지노는 불법자금의 이동에 대한 국가의 모니터링이 심하여
출금에 대한 확인사항이 규정으로 정해져있다.
입금금액에 대한 출처자료, 이용자 ID, 출금처에대한 정보등 모든사항은 출금시 체크항목이며 로그인정보, 베팅정보, 접속시간, 이용IP 들을 대조하여 출금이 이루어진다.
위 과정들을 다 모니터링툴을 이용하기 때문에 일반 해커들은 단순 잔고, 베팅정보 수정을 하였다해도 출금과정에서 막혀 결과가 없다.
허나, 불법사이트들은 어떨까 서버침투에 대한 보완이 허술할 뿐더러,
출금에 대한 모니터링자체가 없다. 이용자의 출금금액이 높으면 먹튀를 할뿐이다.
또 해당 IP차단하여 접속자체를 막아버린다.
하지만 예전에 입/출금한 항목은 정산을 통하여 관리하기때문에 불법 운영한다해도 나름 신경쓰는 모습을 보인다.
입금과정은 보통은 계좌이체로 이용하는 경우 많고 관리자는 입금이 확인되면 수기로 이용자에게 Credit을 충전하는 방식을 쓴다. 합법카지노의 경우 deposit 절차가 이루어지면 각 ID를 통하여 Credit이 충전되는 방식이다.
요즘 해커들은 DB조작의 경우 걸릴 위험이 많아 Credit입금과정을 조작하여 임의ID에 입금승인이 나면 임의ID는 물론 다른ID에도 충전하게 post매게 혹은 토큰정보에 변수조작하여 카지노를 골탕먹인다. 입금정보는 예전 데이타를 가져오기때문에 카드,은행에 정보요청하기 전에는 밝혀내기가 힘들다.
결제가 승인되면 아래와 같이 코딩을 수정하여 token ID 매개변수를 추가 할수 있다.
function TokenHandler(token) {
// Insert the token ID into the form so it gets submitted to the server
var form = document.getElementById('payment-form');
var hiddenInput = document.createElement('input');
hiddenInput.setAttribute('type', 'hidden');
hiddenInput.setAttribute('name', 'stripeToken');
hiddenInput.setAttribute('value', token.id);
form.appendChild(hiddenInput);
// Submit the form
form.submit();
위와같이 수정한다면 child에 변수값을 준다면 가능하다.
이같이 다양한 수법으로 해킹이 이루어진다. 단순 DB수정으로 걸린 해커들의 뉴스기사를 심심찮게 볼수 있다. 카지노IT 해킹 기술은 빠른 속도로 성장하며, 많은 사례들로 인한 최고의 기술을 선보인다고 생각된다.