Closed vieyahn2017 closed 5 months ago
https://github.com/robertkrimen/otto
Otto is a JavaScript parser and interpreter written natively in Go.
https://github.com/ilanyu/docker-ocserv
Openconnect server (ocserv) is an SSL VPN server for administrators who require elaborate user management and contro
基于frp的
Micro8 很多pdf
https://github.com/Micropoor/Micro8
渗透攻击超十年,由于年龄,身体原因,自己感觉快要退出一线渗透攻击了。遂打算把毕生所学用文字表写出来。因为文章涉及到敏感的攻击行为,所以好多需要打马赛克,或者是本地以demo的形式表现出来。当这个行业做久了,你也终有一天发现原来事物的本质是如此重要。比如内网渗透的本质是信息搜集。当年某大佬把这条经验传递给我,同样,今天变成老家伙的我,也希望把这条经验传递下去。
文中一定会出现笔误或者不对的地方,请大家多多包涵,提前向各位说声对不起,所有课程从基础开始(包括工具的介绍,应用等,由于是基础开始,部分内容可能会涉及初级知识点,请见谅),这样以后新来的同事或者想要自我从头学习的同事也可以避开一些弯路,在写的过程中,我深深体会到分享者才是学习中的最大受益者,由于需要成文章,所以需要查阅大量的资料。在整个过程中,又学习到很多知识点。连载其中包括穿插在工作中的项目心得笔记,包括但不限制于代码审计,web渗透,内网渗透,域渗透,隧道介绍,日志溯源与暴力溯源等。如果有课程指定需求介绍相关技术的同事(在我技术能力范围之内),请发我的邮箱:micropoor@gmail.com。在2010-2012年之间一直在写<PHP安全新闻早8点>,但是由于当时的工作原因,就不在写了。这次的所有课程无版权,只希望自己可以在本来已封闭的技术氛围里,依然做出一些技术文档输出。那么这次的教程我想依然想叫<PHP安全新闻早8点>,笔者相信有一天,你会发现原来弄清事物的本质是这样的有趣。
如需指定技术诉求,请留言于下,方便在未来更新的课时中,加入。再次感谢所有读者。
目录结构,请参见Wiki
渗透测试/APT模拟攻击,是一把双刃剑,Micro8系列适用于初中级安全从业人员,乙方安全测试,甲方安全自检,网络安全爱好者等,企业安全防护与提高,该系列遵守:免费,自由,共享,开源。请勿触犯法律,如触犯与本作者无关。当下载/传播/学习等便视为同意该条例。愿读者学有所成,问有所得,静有所思,而私有所惘。
基于php和bash的离线下载神器 http://goxz.gq/
https://github.com/ilanyu/BlockSecureFlag
没咋写简介。 google搜索如下
ilanyu/BlockSecureFlag: BlockSecureFlag - GitHubgithub.com › ilanyu › BlockSecureFlag
ilanyu/BlockSecureFlag - GitHubgithub.com › ilanyu › BlockSecureFlag › releases Dismiss. Be notified of new releases. Create your free GitHub account today to subscribe to this repository for new releases and build software alongside 40 ...
Xposed框架模块– QQ闪照截图(BlockSecureFlag) - Xposed 作者ilanyu撰写的一款Xposed框架模块,实际上适用于多种包含这种机制的软件
https://github.com/ilanyu/ReverseProxy-Android
不写md,哎
https://github.com/ilanyu/ReverseProxy
ReverseProxy in golang
./ReverseProxy_[OS]_[ARCH] -h
Usage of ReverseProxy_[OS]_[ARCH]:
-l string
listen on ip:port (default "0.0.0.0:8888")
-r string
reverse proxy addr (default "http://idea.lanyus.com:80")
./ReverseProxy_windows_amd64.exe -l "0.0.0.0:8081" -r "https://www.baidu.com"
Listening on 0.0.0.0:8081, forwarding to https://www.baidu.com
这个代码很简单,就三个文件。干脆列出来
cmd.go
package main
import "flag"
type Cmd struct {
bind string
remote string
ip string
}
func parseCmd() Cmd {
var cmd Cmd
flag.StringVar(&cmd.bind, "l", "0.0.0.0:8888", "listen on ip:port")
flag.StringVar(&cmd.remote, "r", "http://idea.lanyus.com:80", "reverse proxy addr")
flag.StringVar(&cmd.ip, "ip", "", "reverse proxy addr server ip")
flag.Parse()
return cmd
}
handle.go
package main
import (
"net/http"
"net/url"
"net/http/httputil"
"log"
"net"
"time"
"context"
"github.com/bogdanovich/dns_resolver"
"strings"
)
type handle struct {
reverseProxy string
}
func (this *handle) ServeHTTP(w http.ResponseWriter, r *http.Request) {
log.Println(r.RemoteAddr + " " + r.Method + " " + r.URL.String() + " " + r.Proto + " " + r.UserAgent())
remote, err := url.Parse(this.reverseProxy)
if err != nil {
log.Fatalln(err)
}
dialer := &net.Dialer{
Timeout: 30 * time.Second,
KeepAlive: 30 * time.Second,
DualStack: true,
}
http.DefaultTransport.(*http.Transport).DialContext = func(ctx context.Context, network, addr string) (net.Conn, error) {
remote := strings.Split(addr, ":")
if cmd.ip == "" {
resolver := dns_resolver.New([]string{"114.114.114.114", "114.114.115.115", "119.29.29.29", "223.5.5.5", "8.8.8.8", "208.67.222.222", "208.67.220.220"})
resolver.RetryTimes = 5
ip, err := resolver.LookupHost(remote[0])
if err != nil {
log.Println(err)
}
cmd.ip = ip[0].String()
}
addr = cmd.ip + ":" + remote[1]
return dialer.DialContext(ctx, network, addr)
}
proxy := httputil.NewSingleHostReverseProxy(remote)
r.Host = remote.Host
proxy.ServeHTTP(w, r)
}
main.go
package main
import (
"net/http"
"log"
)
var cmd Cmd
var srv http.Server
func StartServer(bind string, remote string) {
log.Printf("Listening on %s, forwarding to %s", bind, remote)
h := &handle{reverseProxy: remote}
srv.Addr = bind
srv.Handler = h
//go func() {
if err := srv.ListenAndServe(); err != nil {
log.Fatalln("ListenAndServe: ", err)
}
//}()
}
func StopServer() {
if err := srv.Shutdown(nil) ; err != nil {
log.Println(err)
}
}
func main() {
cmd = parseCmd()
StartServer(cmd.bind, cmd.remote)
}
https://github.com/ilanyu/gfwlist2dnsmasq
cmd.go
package main
import "flag"
type Cmd struct {
gfwListUrl string
dns string
saveFile string
v bool
}
func parseCmd() Cmd {
var cmd Cmd
flag.StringVar(&cmd.gfwListUrl, "url", "https://raw.githubusercontent.com/gfwlist/gfwlist/master/gfwlist.txt", "gfw list url")
flag.StringVar(&cmd.dns, "dns", "208.67.220.220#5353", "dns")
flag.StringVar(&cmd.saveFile, "file", "./dnsmasq.servers.conf", "save file")
flag.BoolVar(&cmd.v, "v", false, "v")
flag.Parse()
return cmd
}
main.go
package main
import (
"net/http"
"encoding/base64"
"io/ioutil"
"strings"
"regexp"
"os"
"log"
)
func Decode(raw []byte) []byte {
decoded := make([]byte, base64.StdEncoding.DecodedLen(len(raw)))
base64.StdEncoding.Decode(decoded, raw)
return decoded
}
func main() {
cmd := parseCmd()
client := http.Client{}
resp, err := client.Get(cmd.gfwListUrl)
if err != nil {
log.Fatalln(err)
}
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatalln(err)
}
lines := strings.Split(string(Decode(body)), "\n")
pattern := `^([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])$`
compile := regexp.MustCompile(pattern)
var l []string
perLine := ""
for line := range lines {
if len(lines[line]) == 0 {
continue
} else if lines[line][0] == '!' {
continue
} else if lines[line][0:2] == "@@" {
continue
} else if strings.Contains(lines[line], "/") || strings.Contains(lines[line], "*") || strings.Contains(lines[line], "[") || strings.Contains(lines[line], "%") || !strings.Contains(lines[line], ".") {
continue
} else if compile.MatchString(lines[line]) {
continue
} else if lines[line][0:2] == "||" {
if perLine != lines[line][2:] {
l = append(l, "server=/"+lines[line][2:]+"/"+cmd.dns)
}
perLine = lines[line][2:]
} else if lines[line][0] == '.' {
if perLine != lines[line][1:] {
l = append(l, "server=/"+lines[line][1:]+"/"+cmd.dns)
}
perLine = lines[line][1:]
} else {
if perLine != lines[line] {
l = append(l, "server=/"+lines[line]+"/"+cmd.dns)
}
perLine = lines[line]
}
}
fp, err := os.OpenFile(cmd.saveFile, os.O_CREATE|os.O_TRUNC|os.O_RDWR, 0755)
if err != nil {
log.Fatalln(err)
}
defer fp.Close()
dnsmasqServer := strings.Join(l, "\n")
if cmd.v {
println(dnsmasqServer)
}
fp.WriteString(dnsmasqServer)
}
https://github.com/ilanyu/TimeSync
use:
server: TimeSync -type server -ServerAddr 192.168.123.10:2345 client: TimeSync -type client -ServerAddr 255.255.255.255:2345 -Client 192.168.123.11:0
TimeSync.go
package main
import (
"runtime"
"os/exec"
"log"
"flag"
"net"
"time"
"strconv"
)
// UpdateDate can update system date.
//
// You should provide args like 2017/04/30, is year/month/day
func UpdateDate(date string) error {
cmd := exec.Command("cmd", "/c", "date", date)
if err := cmd.Start(); err != nil {
return err
}
if err := cmd.Wait(); err != nil {
return err
}
return nil
}
// UpdateTime can update system time.
//
// You should provide args like 13:45:01.23, is hour:mine:second
func UpdateTime(time string) error {
cmd := exec.Command("cmd", "/c", "time", time)
if err := cmd.Start(); err != nil {
return err
}
if err := cmd.Wait(); err != nil {
return err
}
return nil
}
func server(serverAddr string) {
ServerAddr, err := net.ResolveUDPAddr("udp", serverAddr)
if err != nil {
log.Println(err)
}
ServerConn, err := net.ListenUDP("udp", ServerAddr)
defer ServerConn.Close()
buf := make([]byte, 1024)
for {
n, addr, err := ServerConn.ReadFromUDP(buf)
if err != nil {
log.Println("Error: ", err)
}
resp := string(buf[0:n])
log.Println("Received ", resp, " from ", addr)
if resp != "TimeSync" {
continue
}
now := time.Now().Unix()
ServerConn.WriteToUDP([]byte(strconv.FormatInt(now, 10)), addr)
}
}
func main() {
if runtime.GOOS != "windows" {
panic("Not Windows")
}
taip := flag.String("type", "client", "[server|client]")
serverAddr := flag.String("ServerAddr", "192.168.123.155:2345", "server listen addr, or server addr")
clientAddr := flag.String("ClientAddr", "192.168.123.155:0", "client addr")
//netType:= flag.String("netType", "udp", "[tcp|udp]")
flag.Parse()
log.Println(*taip)
switch *taip {
case "server":
server(*serverAddr)
case "client":
ServerAddr, err := net.ResolveUDPAddr("udp", *serverAddr)
if err != nil {
log.Println(err)
}
LocalAddr, err := net.ResolveUDPAddr("udp", *clientAddr)
if err != nil {
log.Println(err)
}
Conn, err := net.ListenUDP("udp", LocalAddr)
defer Conn.Close()
if err != nil {
log.Println(err)
}
var addr net.Addr
var n int
buf := make([]byte, 1024)
for {
_, err = Conn.WriteToUDP([]byte("TimeSync"), ServerAddr)
if err != nil {
log.Println(err)
}
time.Sleep(time.Second * 1)
Conn.SetReadDeadline(time.Now().Add(5 * time.Second))
n, addr, err = Conn.ReadFrom(buf)
if err != nil {
log.Println(err)
} else {
break
}
}
resp := string(buf[0:n])
log.Println("Received ", resp, " from ", addr)
ServerUnixTime, err := strconv.ParseInt(resp, 10, 64)
if err != nil {
log.Println(err)
}
serverDate := time.Unix(ServerUnixTime, 0).Format("2006-01-02")
serverTime := time.Unix(ServerUnixTime, 0).Format("15:04:05")
log.Println(serverDate)
log.Println(serverTime)
UpdateDate(serverDate)
UpdateTime(serverTime)
default:
log.Fatalln("Please tell me the type.")
return
}
}
nac.syso 好像是个go的编译文件 windows程序获取管理员权限(UAC ) ?
https://github.com/ilanyu/adb2dnsmasq
cmd.go
package main
import "flag"
type Cmd struct {
urls string
savePath string
saveMode string
}
func parseCmd() Cmd {
var cmd Cmd
flag.StringVar(&cmd.urls, "urls", "https://easylist-downloads.adblockplus.org/easylist.txt|https://easylist-downloads.adblockplus.org/easyprivacy.txt|https://easylist-downloads.adblockplus.org/easylistchina.txt|https://raw.githubusercontent.com/cjx82630/cjxlist/master/cjx-annoyance.txt|https://raw.githubusercontent.com/cjx82630/cjxlist/master/cjxlist.txt", "urls")
flag.StringVar(&cmd.savePath, "save.path", "./dnsmasq.adb.conf", "save path")
flag.StringVar(&cmd.saveMode, "save.mode", "a", "save mode [a|t] append or trunc")
flag.Parse()
return cmd
}
main.go
package main
import (
"net/http"
"log"
"io/ioutil"
"regexp"
"strings"
"os"
)
func MergeSlice(s1 []string, s2 []string) []string {
slice := make([]string, len(s1)+len(s2))
copy(slice, s1)
copy(slice[len(s1):], s2)
return slice
}
func getAdbList(url string, adbList chan []string) {
var adbListTmp []string
resp, err := http.Get(url)
if err != nil {
log.Fatalln(err)
}
adbContents, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatalln(err)
}
adbLines := strings.Split(string(adbContents), "\n")
re := regexp.MustCompile(`\|\|([a-z0-9\.\-]+[a-z]+[a-z0-9\.\-]+)\^$`)
for line := range adbLines {
match := re.FindStringSubmatch(adbLines[line])
if len(match) == 2 {
adbListTmp = append(adbListTmp, "address=/"+match[1]+"/0.0.0.0/")
}
}
adbList <- adbListTmp
}
func main() {
cmd := parseCmd()
url := strings.Split(cmd.urls, "|")
adbList := make(chan []string, len(url))
for i := range url {
go getAdbList(url[i], adbList)
}
var mode int
if cmd.saveMode == "a" {
mode = os.O_CREATE | os.O_RDWR | os.O_APPEND
} else {
mode = os.O_CREATE | os.O_RDWR | os.O_TRUNC
}
fp, err := os.OpenFile(cmd.savePath, mode, 0755)
if err != nil {
log.Fatalln(err)
}
defer fp.Close()
var adbContents []string
for range url {
adbContents = MergeSlice(adbContents, <-adbList)
}
fp.WriteString(strings.Join(adbContents, "\n"))
}
https://github.com/ilanyu/memdump
example use:
# ps // get pid 3149
# cat /proc/3149/maps // get b6946000-b6a12000 r-xp 00000000 08:06 652 /system/lib/libsqlite.so
# ./memdump -pid 3149 -saddr b6946000 -eaddr b6a12000
test OK on x86 android 4.2 (Genymotion Android Emulator)
memdump.go
package main
import (
"syscall"
"fmt"
"os"
"strconv"
"flag"
)
func main() {
pid := flag.Int("pid", 1, "PID")
start_addr_hex := flag.String("saddr", "0", "start addr(hex)")
end_addr_hex := flag.String("eaddr", "0", "end addr(hex)")
fileName := flag.String("filename", "memdump.mem", "filename")
flag.Parse()
start_addr, _ := strconv.ParseInt(*start_addr_hex, 16, 64)
end_addr, _ := strconv.ParseInt(*end_addr_hex, 16, 64)
length := end_addr - start_addr
if err := syscall.PtraceAttach(*pid); err != nil {
fmt.Errorf("PtraceAttach is err: %s", err)
}
var ws syscall.WaitStatus
syscall.Wait4(*pid, &ws, syscall.WNOHANG, nil)
path := fmt.Sprintf("/proc/%d/mem", *pid)
fp, err := os.OpenFile(path, os.O_RDONLY, 0755)
defer fp.Close()
if err != nil {
fmt.Errorf("OpenFile is err: %s", err)
}
fp.Seek(start_addr, os.SEEK_SET)
buf := make([]byte, length)
n, err := fp.Read(buf)
if err != nil {
fmt.Errorf("Read is err: %s", err)
}
fmt.Println("read " + strconv.Itoa(n))
fpw, err := os.OpenFile(*fileName, os.O_CREATE|os.O_WRONLY|os.O_TRUNC, 0755)
defer fpw.Close()
fpw.Write(buf)
if err := syscall.PtraceDetach(*pid); err != nil {
fmt.Errorf("PtraceDetach is err: %s", err)
}
}
https://github.com/ilanyu/multiDown
Simple Multi-thread Download Lib
multiDown.go
package multiDown
import (
"net/http"
"io/ioutil"
"strconv"
"sort"
"bytes"
"errors"
"io"
)
// temp save bytes in channel
type content struct {
id int
buffer []byte
err error
}
type contents []content
func (c contents) Len() int {
return len(c)
}
func (c contents) Less(i, j int) bool {
return c[i].id < c[j].id
}
func (c contents) Swap(i, j int) {
c[i], c[j] = c[j], c[i]
}
// Simple Multi-thread Download
func Download(url string, connNum int) ([]byte, error) {
// check thread num
if connNum < 1 || connNum > 33 {
return nil, errors.New("1 < connNum < 32")
}
if connNum != 1 {
// Get content-Length
req, err := http.NewRequest("HEAD", url, nil)
if err != nil {
return nil, err
}
client := http.Client{}
resp, err := client.Do(req)
if err != nil {
return nil, err
}
all, err := strconv.ParseInt(resp.Header.Get("content-Length"), 10, 64)
per := all / int64(connNum)
if err != nil {
return nil, err
}
channel := make(chan content)
for i := 0; i < connNum; i++ {
s := strconv.FormatInt(per*int64(i)+1, 10)
if s == "1" {
s = "0"
}
e := strconv.FormatInt(per*int64(i+1), 10)
if connNum-i == 1 {
e = resp.Header.Get("content-Length")
}
go func(i int, s string, e string, channel chan content) {
var client2 http.Client
req2, err := http.NewRequest("GET", url, nil)
if err != nil {
panic(err)
return
}
req2.Header.Set("Range", "bytes="+s+"-"+e)
resp2, err := client2.Do(req2)
if err != nil {
channel <- content{err: err}
return
}
var buf bytes.Buffer
written, err := io.Copy(&buf, resp2.Body)
if err != nil {
channel <- content{err: err}
return
}
eI, _ := strconv.ParseInt(e, 10, 64)
sI, _ := strconv.ParseInt(s, 10, 64)
if eI-sI > 0 && written == 0 {
channel <- content{err: errors.New("not get " + s + "-" + e)}
return
}
channel <- content{id: i, buffer: buf.Bytes()}
}(i, s, e, channel)
}
con := make(contents, connNum)
for i := 0; i < connNum; i++ {
con[i] = <-channel
if con[i].err != nil {
return nil, con[i].err
}
}
sort.Sort(con)
var buf bytes.Buffer
for i := 0; i < connNum; i++ {
buf.Write(con[i].buffer)
}
return buf.Bytes(), nil
} else {
resp2, err := http.Get(url)
if err != nil {
return nil, err
}
b, err := ioutil.ReadAll(resp2.Body)
if err != nil {
return nil, err
}
return b, nil
}
}
func DownloadToFile(filename string, url string, connNum int) error {
b, err := Download(url, connNum)
if err != nil {
return err
}
return ioutil.WriteFile(filename, b, 0755)
}
multiDown_test.go
package multiDown
import "testing"
func TestDownload(t *testing.T) {
_, err := Download("http://192.168.123.12:61323/mp3?filepath=/storage/emulated/0/netease/cloudmusic/Cache/Music1/3413713-128000-c9c99b69897e438a9fbc1d25c3a26399.mp3.uc!&decode=true", 10)
if err != nil {
t.Fatal(err)
}
}
func TestDownloadToFile(t *testing.T) {
err := DownloadToFile("25703039.mp3", "http://192.168.123.12:61323/mp3?filepath=/storage/emulated/0/netease/cloudmusic/Cache/Music1/3413713-128000-c9c99b69897e438a9fbc1d25c3a26399.mp3.uc!&decode=true", 10)
if err != nil {
t.Fatal(err)
}
}
https://github.com/ilanyu/erya
尔雅通识课快进 for 成都航空职业技术学院
index.php
<?php
echo 'javascript:$.getScript("http://' . $_SERVER["HTTP_HOST"] . '/2.php?videoId=" + document.getElementById("videoId").value + "&videoNumber=" + document.getElementById("videoNumber").value + "&courseId=" + document.getElementById("courseId").value + "&schoolCourseId=" + document.getElementById("schoolCourseId").value);$.getScript("http://' . $_SERVER["HTTP_HOST"] . '/4.php?videoId=" + document.getElementById("videoId").value + "&videoNumber=" + document.getElementById("videoNumber").value + "&courseId=" + document.getElementById("courseId").value + "&schoolCourseId=" + document.getElementById("schoolCourseId").value);$.getScript("http://' . $_SERVER["HTTP_HOST"] . '/6.php?videoId=" + document.getElementById("videoId").value + "&videoNumber=" + document.getElementById("videoNumber").value + "&courseId=" + document.getElementById("courseId").value + "&schoolCourseId=" + document.getElementById("schoolCourseId").value);$.getScript("http://' . $_SERVER["HTTP_HOST"] . '/8.php?videoId=" + document.getElementById("videoId").value + "&videoNumber=" + document.getElementById("videoNumber").value + "&courseId=" + document.getElementById("courseId").value + "&schoolCourseId=" + document.getElementById("schoolCourseId").value);$.getScript("http://' . $_SERVER["HTTP_HOST"] . '/10.php?videoId=" + document.getElementById("videoId").value + "&videoNumber=" + document.getElementById("videoNumber").value + "&courseId=" + document.getElementById("courseId").value + "&schoolCourseId=" + document.getElementById("schoolCourseId").value);$.getScript("http://' . $_SERVER["HTTP_HOST"] . '/12.php?videoId=" + document.getElementById("videoId").value + "&videoNumber=" + document.getElementById("videoNumber").value + "&courseId=" + document.getElementById("courseId").value + "&schoolCourseId=" + document.getElementById("schoolCourseId").value);$.getScript("http://' . $_SERVER["HTTP_HOST"] . '/14.php?videoId=" + document.getElementById("videoId").value + "&videoNumber=" + document.getElementById("videoNumber").value + "&courseId=" + document.getElementById("courseId").value + "&schoolCourseId=" + document.getElementById("schoolCourseId").value);$.getScript("http://' . $_SERVER["HTTP_HOST"] . '/16.php?videoId=" + document.getElementById("videoId").value + "&videoNumber=" + document.getElementById("videoNumber").value + "&courseId=" + document.getElementById("courseId").value + "&schoolCourseId=" + document.getElementById("schoolCourseId").value);$.getScript("http://' . $_SERVER["HTTP_HOST"] . '/18.php?videoId=" + document.getElementById("videoId").value + "&videoNumber=" + document.getElementById("videoNumber").value + "&courseId=" + document.getElementById("courseId").value + "&schoolCourseId=" + document.getElementById("schoolCourseId").value);$.getScript("http://' . $_SERVER["HTTP_HOST"] . '/end.php?videoId=" + document.getElementById("videoId").value + "&videoNumber=" + document.getElementById("videoNumber").value + "&courseId=" + document.getElementById("courseId").value + "&schoolCourseId=" + document.getElementById("schoolCourseId").value);';
?>
end.php
<?php
$data = json_decode(file_get_contents("http://cdavtc.tsk.erya100.com/player/playerAction!getVideoUrl?videoId=" . $_GET["videoId"] . "&courseId=" . $_GET["courseId"] . "&schoolId=000343&seriNum=" . $_GET["videoNumber"]),1);
function GetURLPro($data) {
$rand = base64_encode($data["data"]["totalTime"] . "&2&" . time() . "&" . rand(001,999) . "&" . rand(001,999) . "&Chrome 35.0.1916.153&0");
return "http://cdavtc.tsk.erya100.com/student/studentVideoAction!recieveNewVideoTime?videoId=" . $_GET["videoId"] . "&videoNumber=" . $_GET["videoNumber"] . "&courseId=" . $_GET["courseId"] . "&rand=" . $rand . "&ecode=" . md5("2erya_tsk" . $rand) . "&schoolCourseId=" . $_GET["schoolCourseId"];
}
echo '$.getJSON(
"' . GetURLPro($data) . '",
function(data) {
if (data.status == "1" || data.status == "4") window.close() ;
}
);';
echo '$.getScript("http://' . $_SERVER["HTTP_HOST"] . '/end.php?videoId=" + document.getElementById("videoId").value + "&videoNumber=" + document.getElementById("videoNumber").value + "&courseId=" + document.getElementById("courseId").value + "&schoolCourseId=" + document.getElementById("schoolCourseId").value);';
2.php
<?php
function GetMineURL($mine) {
$rand = base64_encode($mine * 60 . "&1&" . time() . "&" . rand(001,999) . "&" . rand(001,999) . "&Chrome 35.0.1916.153&0");
return "http://cdavtc.tsk.erya100.com/student/studentVideoAction!recieveNewVideoTime?videoId=" . $_GET["videoId"] . "&videoNumber=" . $_GET["videoNumber"] . "&courseId=" . $_GET["courseId"] . "&rand=" . $rand . "&ecode=" . md5("1erya_tsk" . $rand) . "&schoolCourseId=" . $_GET["schoolCourseId"];
}
echo '$.get("' . GetMineURL(2) . '");';
https://github.com/aria2/aria2
aria2 is a lightweight multi-protocol & multi-source, cross platform download utility operated in command-line. It supports HTTP/HTTPS, FTP, SFTP, BitTorrent and Metalink
linux命令行的轻量级下载工具
https://github.com/ilanyu/docker-atlassian-confluence-server
Dockerfile
README.md
confluenceCrack.jar init
entrypoint.sh init
mysql-connector-java-5.1.42.jar
Quick Start For the directory in the environmental variable CONFLUENCE_HOME that is used to store Confluence data (amongst other things) we recommend mounting a host directory as a data volume:
Start Atlassian Confluence Server:
$> mkdir -p /data/your-confluence-home
$> docker run --restart=always -v /data/your-confluence-home:/var/atlassian/application-data/confluence --name="confluence" -d -p 8090:8090 -p 8091:8091 ilanyu/confluence-server
Get Activate Code:
$> docker exec -it confluence java -jar /opt/atlassian/confluence/confluenceCrack.jar
Success. Confluence is now available on http://localhost:8090*
https://github.com/ilanyu?tab=repositories
之前idea破解工具的制作大神
包括学习go(好几个简单demo),下载,安全上网,安卓破解等的好多资源